项目作者: tjmahr

项目描述 :
R package for dealing with Eprime txt files
高级语言: R
项目地址: git://github.com/tjmahr/rprime.git
创建时间: 2014-05-20T14:50:10Z
项目社区:https://github.com/tjmahr/rprime

开源协议:GNU General Public License v2.0

下载


rprime

Build Status Coverage Status CRAN\_Status\_Badge

rprime is an R package for parsing .txt generated by E-Prime, a program for running psychological experiments.

Overview

The main workflow for rprime involves:

  1. read_eprime: reliably read in data from an Eprime log (.txt) file.
  2. FrameList: extract the text in each "LogFrame" in the file, storing each log-frame as an R list.
  3. preview_levels, preview_eprime: explore the structure of the parsed data.
  4. keep_levels, drop_levels, filter_in, filter_out: select and filter particular levels from the txt-file.
  5. to_data_frame: make a data-frame from the parsed data.

Installation

To get the current, released version from CRAN:

  1. install.packages("rprime")

Examples

Getting data into R

Load the file with read_eprime and parse its contents with FrameList.

  1. library("rprime")
  2. # Read in an Eprime text file
  3. experiment_lines <- read_eprime("data/SAILS/SAILS_001X00XS1.txt")
  4. # Extract and parse the log-frames from the file
  5. experiment_data <- FrameList(experiment_lines)

Exploring

In the text file, frames were distinguished by the procedure they are running as well as the their level of nesting. Get an overview of the different types of frames with preview_levels.

  1. # There are six different kinds of frames in this file
  2. preview_levels(experiment_data)
  3. #> Level Counts:
  4. #> Eprime.Level Running Procedure freq
  5. #> 1 Header Header 1
  6. #> 3 PracticeBlock PracticeTrialProc 10
  7. #> 2 PracticeList PracticeProc 1
  8. #> 3 TrialLists TrialProc 70
  9. #> 2 BlockList BlockProc 7
  10. #> 1 <NA> <NA> 1

Get a preview of the data in each kind of frame with preview_frames.

  1. preview_frames(experiment_data)
  2. #>
  3. #> Eprime.Level Running Procedure
  4. #> 1 Header Header
  5. #> List of 22
  6. #> $ Eprime.Level : num 1
  7. #> $ Eprime.LevelName : chr "Header_"
  8. #> $ Eprime.Basename : chr "SAILS_001X00XS1"
  9. #> $ Eprime.FrameNumber : chr "1"
  10. #> $ Procedure : chr "Header"
  11. #> $ Running : chr "Header"
  12. #> $ VersionPersist : chr "1"
  13. #> $ LevelName : chr "LogLevel10"
  14. #> $ Experiment : chr "SAILS"
  15. #> $ SessionDate : chr "12-01-2013"
  16. #> $ SessionTime : chr "11:00:00"
  17. #> $ SessionTimeUtc : chr "5:00:00 PM"
  18. #> $ Dilaect : chr "Yes"
  19. #> $ Subject : chr "001"
  20. #> $ ExpTyp : chr "X"
  21. #> $ Age : chr "00"
  22. #> $ Gender : chr "X"
  23. #> $ Session : chr "1"
  24. #> $ ChildNativeDialect : chr "S"
  25. #> $ RandomSeed : chr "-676084859"
  26. #> $ Group : chr "1"
  27. #> $ Display.RefreshRate: chr "60.004"
  28. #> - attr(*, "class")= chr [1:2] "EprimeFrame" "list"
  29. #>
  30. #> Eprime.Level Running Procedure
  31. #> 3 PracticeBlock PracticeTrialProc
  32. #> List of 25
  33. #> $ Eprime.Level : num 3
  34. #> $ Eprime.LevelName : chr "PracticeBlock_1"
  35. #> $ Eprime.Basename : chr "SAILS_001X00XS1"
  36. #> $ Eprime.FrameNumber : chr "2"
  37. #> $ Procedure : chr "PracticeTrialProc"
  38. #> $ Running : chr "PracticeBlock"
  39. #> $ Practice : chr "1"
  40. #> $ Sound : chr "LAKE1.WAV"
  41. #> $ Correct : chr "Word"
  42. #> $ Module : chr "LAKE"
  43. #> $ Color : chr "red"
  44. #> $ WordImage : chr "lake"
  45. #> $ NonWordImage : chr "notlake"
  46. #> $ PuzzleImage : chr "up"
  47. #> $ Cycle : chr "1"
  48. #> $ Sample : chr "1"
  49. #> $ TrialSlide.OnsetDelay : chr "197"
  50. #> $ TrialSlide.OnsetTime : chr "899413"
  51. #> $ TrialSlide.DurationError: chr "-999999"
  52. #> $ TrialSlide.RTTime : chr "0"
  53. #> $ TrialSlide.ACC : chr "0"
  54. #> $ TrialSlide.RT : chr "0"
  55. #> $ TrialSlide.RESP : chr ""
  56. #> $ TrialSlide.CRESP : chr ""
  57. #> $ Response : chr "Word"
  58. #> - attr(*, "class")= chr [1:2] "EprimeFrame" "list"
  59. #>
  60. #> Eprime.Level Running Procedure
  61. #> 2 PracticeList PracticeProc
  62. #> List of 11
  63. #> $ Eprime.Level : num 2
  64. #> $ Eprime.LevelName : chr "PracticeList_1"
  65. #> $ Eprime.Basename : chr "SAILS_001X00XS1"
  66. #> $ Eprime.FrameNumber: chr "12"
  67. #> $ Procedure : chr "PracticeProc"
  68. #> $ Running : chr "PracticeList"
  69. #> $ Cycle : chr "1"
  70. #> $ Sample : chr "1"
  71. #> $ PuzzleMovie : chr "up"
  72. #> $ TrainingNonWord : chr "notlake"
  73. #> $ TrainingWord : chr "lake"
  74. #> - attr(*, "class")= chr [1:2] "EprimeFrame" "list"
  75. #>
  76. #> Eprime.Level Running Procedure
  77. #> 3 TrialLists TrialProc
  78. #> List of 25
  79. #> $ Eprime.Level : num 3
  80. #> $ Eprime.LevelName : chr "TrialLists_1"
  81. #> $ Eprime.Basename : chr "SAILS_001X00XS1"
  82. #> $ Eprime.FrameNumber : chr "13"
  83. #> $ Procedure : chr "TrialProc"
  84. #> $ Running : chr "TrialLists"
  85. #> $ Sound : chr "LAKE23B.WAV"
  86. #> $ Correct : chr "Word"
  87. #> $ LakeLevel1 : chr "8"
  88. #> $ Module : chr "LAKE"
  89. #> $ Color : chr "blue"
  90. #> $ WordImage : chr "lake"
  91. #> $ NonWordImage : chr "notlake"
  92. #> $ PuzzleImage : chr "butterfly"
  93. #> $ TrialSlide.OnsetDelay : chr "119"
  94. #> $ TrialSlide.OnsetTime : chr "1023939"
  95. #> $ TrialSlide.DurationError: chr "-999999"
  96. #> $ TrialSlide.RTTime : chr "0"
  97. #> $ TrialSlide.ACC : chr "0"
  98. #> $ TrialSlide.RT : chr "0"
  99. #> $ TrialSlide.RESP : chr ""
  100. #> $ TrialSlide.CRESP : chr ""
  101. #> $ Response : chr "Word"
  102. #> $ Cycle : chr "1"
  103. #> $ Sample : chr "1"
  104. #> - attr(*, "class")= chr [1:2] "EprimeFrame" "list"
  105. #>
  106. #> Eprime.Level Running Procedure
  107. #> 2 BlockList BlockProc
  108. #> List of 11
  109. #> $ Eprime.Level : num 2
  110. #> $ Eprime.LevelName : chr "BlockList_1"
  111. #> $ Eprime.Basename : chr "SAILS_001X00XS1"
  112. #> $ Eprime.FrameNumber: chr "23"
  113. #> $ Procedure : chr "BlockProc"
  114. #> $ Running : chr "BlockList"
  115. #> $ PuzzleMovie : chr "butterfly"
  116. #> $ TrainingNonWord : chr "notlake"
  117. #> $ TrainingWord : chr "lake"
  118. #> $ Cycle : chr "1"
  119. #> $ Sample : chr "1"
  120. #> - attr(*, "class")= chr [1:2] "EprimeFrame" "list"
  121. #>
  122. #> Eprime.Level Running Procedure
  123. #> 1 <NA> <NA>
  124. #> List of 20
  125. #> $ Eprime.Level : num 1
  126. #> $ Eprime.LevelName : logi NA
  127. #> $ Eprime.Basename : chr "SAILS_001X00XS1"
  128. #> $ Eprime.FrameNumber : chr "90"
  129. #> $ Procedure : logi NA
  130. #> $ Running : logi NA
  131. #> $ Experiment : chr "SAILS"
  132. #> $ SessionDate : chr "12-01-2013"
  133. #> $ SessionTime : chr "11:00:00"
  134. #> $ SessionTimeUtc : chr "5:00:00 PM"
  135. #> $ Dilaect : chr "Yes"
  136. #> $ Subject : chr "001"
  137. #> $ ExpTyp : chr "X"
  138. #> $ Age : chr "00"
  139. #> $ Gender : chr "X"
  140. #> $ Session : chr "1"
  141. #> $ ChildNativeDialect : chr "S"
  142. #> $ RandomSeed : chr "-676084859"
  143. #> $ Group : chr "1"
  144. #> $ Display.RefreshRate: chr "60.004"
  145. #> - attr(*, "class")= chr [1:2] "EprimeFrame" "list"

preview_eprime (not demonstrated here) does both kinds of previews (levels and frames).

Filtering

Use keep_levels and drop_levels to filter frames according to nesting level.

  1. # Filter (out) by depth of nesting
  2. not_level_1 <- drop_levels(experiment_data, 1)
  3. preview_levels(not_level_1)
  4. #> Level Counts:
  5. #> Eprime.Level Running Procedure freq
  6. #> 3 PracticeBlock PracticeTrialProc 10
  7. #> 2 PracticeList PracticeProc 1
  8. #> 3 TrialLists TrialProc 70
  9. #> 2 BlockList BlockProc 7
  10. # Filter (in) by depth of nesting
  11. just_level_3 <- keep_levels(experiment_data, 3)
  12. preview_levels(just_level_3)
  13. #> Level Counts:
  14. #> Eprime.Level Running Procedure freq
  15. #> 3 PracticeBlock PracticeTrialProc 10
  16. #> 3 TrialLists TrialProc 70

Use filter_in and filter_out to filter frames using attribute values. Use repeated filtering statements to drill down into the list of frames.

  1. # Filter (out) by attribute values
  2. no_header <- filter_out(experiment_data, "Running", values = "Header")
  3. preview_levels(no_header)
  4. #> Level Counts:
  5. #> Eprime.Level Running Procedure freq
  6. #> 3 PracticeBlock PracticeTrialProc 10
  7. #> 2 PracticeList PracticeProc 1
  8. #> 3 TrialLists TrialProc 70
  9. #> 2 BlockList BlockProc 7
  10. #> 1 <NA> <NA> 1
  11. # Filter (in) by attribute values
  12. not_practice <- filter_in(experiment_data, "Running", "TrialLists")
  13. preview_levels(not_practice)
  14. #> Level Counts:
  15. #> Eprime.Level Running Procedure freq
  16. #> 3 TrialLists TrialProc 70
  17. # Drill down further into the trials by filtering again
  18. sue_trials <- filter_in(not_practice, "Module", "SUE")
  19. preview_eprime(sue_trials)
  20. #> Level Counts:
  21. #> Eprime.Level Running Procedure freq
  22. #> 3 TrialLists TrialProc 30
  23. #>
  24. #> Eprime.Level Running Procedure
  25. #> 3 TrialLists TrialProc
  26. #> List of 25
  27. #> $ Eprime.Level : num 3
  28. #> $ Eprime.LevelName : chr "TrialLists_5"
  29. #> $ Eprime.Basename : chr "SAILS_001X00XS1"
  30. #> $ Eprime.FrameNumber : chr "57"
  31. #> $ Procedure : chr "TrialProc"
  32. #> $ Running : chr "TrialLists"
  33. #> $ Sound : chr "SUE4.WAV"
  34. #> $ Correct : chr "Word"
  35. #> $ SueLevel1 : chr "10"
  36. #> $ Module : chr "SUE"
  37. #> $ Color : chr "blue"
  38. #> $ WordImage : chr "sue"
  39. #> $ NonWordImage : chr "notsue"
  40. #> $ PuzzleImage : chr "madagascar"
  41. #> $ TrialSlide.OnsetDelay : chr "127"
  42. #> $ TrialSlide.OnsetTime : chr "1360767"
  43. #> $ TrialSlide.DurationError: chr "-999999"
  44. #> $ TrialSlide.RTTime : chr "0"
  45. #> $ TrialSlide.ACC : chr "0"
  46. #> $ TrialSlide.RT : chr "0"
  47. #> $ TrialSlide.RESP : chr ""
  48. #> $ TrialSlide.CRESP : chr ""
  49. #> $ Response : chr "Word"
  50. #> $ Cycle : chr "1"
  51. #> $ Sample : chr "41"
  52. #> - attr(*, "class")= chr [1:2] "EprimeFrame" "list"

Exporting

Convert to a dataframe with to_dataframe. Attribute names in the log-frames become column names in the dataframe.

  1. # Export to dataframe
  2. sue_trials_df <- to_data_frame(sue_trials)
  3. str(sue_trials_df)
  4. #> 'data.frame': 30 obs. of 27 variables:
  5. #> $ Eprime.Level : num 3 3 3 3 3 ...
  6. #> $ Eprime.LevelName : chr "TrialLists_5" "TrialLists_5" ...
  7. #> $ Eprime.Basename : chr "SAILS_001X00XS1" "SAILS_001X00XS1" ...
  8. #> $ Eprime.FrameNumber : chr "57" "58" ...
  9. #> $ Procedure : chr "TrialProc" "TrialProc" ...
  10. #> $ Running : chr "TrialLists" "TrialLists" ...
  11. #> $ Sound : chr "SUE4.WAV" "SUE15.WAV" ...
  12. #> $ Correct : chr "Word" "NotWord" ...
  13. #> $ SueLevel1 : chr "10" "2" ...
  14. #> $ Module : chr "SUE" "SUE" ...
  15. #> $ Color : chr "blue" "blue" ...
  16. #> $ WordImage : chr "sue" "sue" ...
  17. #> $ NonWordImage : chr "notsue" "notsue" ...
  18. #> $ PuzzleImage : chr "madagascar" "madagascar" ...
  19. #> $ TrialSlide.OnsetDelay : chr "127" "98" ...
  20. #> $ TrialSlide.OnsetTime : chr "1360767" "1364450" ...
  21. #> $ TrialSlide.DurationError: chr "-999999" "-999999" ...
  22. #> $ TrialSlide.RTTime : chr "0" "0" ...
  23. #> $ TrialSlide.ACC : chr "0" "0" ...
  24. #> $ TrialSlide.RT : chr "0" "0" ...
  25. #> $ TrialSlide.RESP : chr "" "" ...
  26. #> $ TrialSlide.CRESP : chr "" "" ...
  27. #> $ Response : chr "Word" "NotWord" ...
  28. #> $ Cycle : chr "1" "1" ...
  29. #> $ Sample : chr "41" "42" ...
  30. #> $ SueLevel2 : chr NA NA ...
  31. #> $ SueLevel3 : chr NA NA ...
  32. # Don't need every column
  33. columns_to_keep <- c("Eprime.Basename", "Module", "Sample",
  34. "Correct", "Response")
  35. sue_trials_df <- sue_trials_df[columns_to_keep]
  36. head(sue_trials_df)
  37. #> Eprime.Basename Module Sample Correct Response
  38. #> 1 SAILS_001X00XS1 SUE 41 Word Word
  39. #> 2 SAILS_001X00XS1 SUE 42 NotWord NotWord
  40. #> 3 SAILS_001X00XS1 SUE 43 NotWord Word
  41. #> 4 SAILS_001X00XS1 SUE 44 Word Word
  42. #> 5 SAILS_001X00XS1 SUE 45 NotWord NotWord
  43. #> 6 SAILS_001X00XS1 SUE 46 Word Word

Note: rprime thinks that all the values in the final dataframe are character values. You can use type_convert in the readr package to correct the column types:

  1. # Right now the sample numbers are stored as character values
  2. str(sue_trials_df)
  3. #> 'data.frame': 30 obs. of 5 variables:
  4. #> $ Eprime.Basename: chr "SAILS_001X00XS1" "SAILS_001X00XS1" ...
  5. #> $ Module : chr "SUE" "SUE" ...
  6. #> $ Sample : chr "41" "42" ...
  7. #> $ Correct : chr "Word" "NotWord" ...
  8. #> $ Response : chr "Word" "NotWord" ...
  9. library("readr")
  10. sue_trials_df <- type_convert(sue_trials_df)
  11. # Now, they are stored as integers...
  12. str(sue_trials_df)
  13. #> 'data.frame': 30 obs. of 5 variables:
  14. #> $ Eprime.Basename: chr "SAILS_001X00XS1" "SAILS_001X00XS1" ...
  15. #> $ Module : chr "SUE" "SUE" ...
  16. #> $ Sample : int 41 42 43 44 45 ...
  17. #> $ Correct : chr "Word" "NotWord" ...
  18. #> $ Response : chr "Word" "NotWord" ...