Встраивать двумерные массивы как часть многомерных массивов в R - PullRequest
0 голосов
/ 27 сентября 2011

Мои вопросы касаются того, как правильно обращаться с кучей данных, которые у меня есть.

Я провожу эксперимент с 4 условиями.В каждом условии будет по 20 участников, и когда каждый из них завершит эксперимент, у меня останется текстовый файл с 600 строками и 7 столбцами.600 строк соответствуют 600 испытаниям, которые выполняет каждый человек.7 столбцов относятся к переменным, которые измеряются в каждом испытании.

Поэтому мои данные для каждого человека выглядят примерно так (за исключением 600 строк):

394        b               a                0          9773              1        1436
114        a               b                0          3595              1        1246
432        b               a                0          1272              1        1061
209        a               a                1          3514              1        120

Для запускамои анализы, было бы действительно полезно, если бы я мог собрать все эти текстовые файлы в один объект, называемый «данные», который имел бы следующие измерения:

  • Экспериментальное условие (1-4)
  • Номер участника (1-20)
  • Пробный номер (1-600)
  • Переменная (1-7)

Мои файлы имеют такие имена, как "ii-wm-long_1316994934_7_1.txt ", где часть« ii-wm-long »идентифицирует их экспериментальное состояние, а последнее число (1 здесь) идентифицирует их номер участника.

В данный момент мой код выглядитэто:

#Get the names of the text files in the results folder
files <- list.files()

#Conditions - which ones correspond to which numbers
condition.def <- c("ii-wm-long","ii-wm-short","wm-ii-long","wm-ii-short")
#1 = ii-wm-long
#2 = ii-wm-short
#3 = wm-ii-long
#4 = wm-ii-short

#This is where everything will be stored
data <- array(NA,dim=c(4,20,600,7),dimnames=c("condition","participantNumber","trialNumber","experimentalvariable"))

#Loop for each participant's file
for (n in 1:length(files)){

#What condition is the person in?
condition <- unlist(strsplit(files[n],"\\_"))[1]
condition <- grep(condition,condition.def)

#What is their participant number (of the people in that condition)?
ppt <- as.integer(unlist(strsplit(unlist(strsplit(files[n],"\\_")),"\\."))[4])

#Read the text file into the array
data[condition,ppt,,] <- read.table(files[n],sep="\t",header=F,nrows=600,col.names=c("stimulus","category","category.choice","category.correct","category.time","memory.present","memory.time"))

}

Я получаю сообщение об ошибке:

Error in data[condition, ppt, , ] <- read.table(files[n], sep = "\t",  : 
  incorrect number of subscripts

Я прочитал о cbind и abind и не могу понять, как они позволили бы мне читатьданные по одному.

Как правильно взять двумерный массив и повернуть его?в последние 2 измерения 4D массива?

1 Ответ

1 голос
/ 27 сентября 2011

read.table возвращает data.frame, так что, по крайней мере, вам нужно будет обернуть его в as.matrix:

data[condition,ppt,,] <- 
    as.matrix(read.table(files[n], sep="\t", header=FALSE, nrows=600, 
                         col.names=c("stimulus", "category", "category.choice",
                                     "category.correct", "category.time", 
                                     "memory.present", "memory.time")))

Но это довольно хрупко, так как вы идете непосредственно от I/ O в срез массива, и вы должны поставить некоторые проверки работоспособности, чтобы вы знали, что ввод соответствует ожидаемому, файл существует и так далее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...