Я пытаюсь написать функцию dprime, в которой я вычитаю FA из z-показателей попаданий, чтобы получить значение dprime для каждого участника. Участники — это строки, а z-показатели — это столбцы. Мой набор данных (newData) имеет размер 18x16, но я хочу игнорировать первые 8 столбцов. Я хочу повторить вычисление dprime для каждого условия и создать новый набор данных 18x4 (newData2) с выводом.
# Function to apply
dprimeFun <- function(twoColumns){
# Give the function two columns at a time
zH <- twoColumns[ 1 ]
zF <- twoColumns[ 2 ]
dprime <- zH - zF
return(dprime)
}
# Apply the function
newData2 <- cbind(
# Condition 1 dprimes
apply(
newData[ c( "zH1","zF1" ) ], MARGIN=1, FUN=dprimeFun
),
# Repeat for each condition
)
Когда я запускаю это, я получаю следующую ошибку:
Error in apply(newData[c("zH1", "zF1")], MARGIN = 1, FUN = dprimeFun) :
dim(X) must have a positive length
Я нашел этот вопрос, где у кого-то было такое же сообщение об ошибке, однако я думаю, что их решение (просто примените функцию непосредственно к подмножеству данных) не сработает для меня, потому что мне придется делать это 72 раза.
Я также прочитал часто задаваемые вопросы по R 'Почему матрицы теряют размеры?' но я не понимаю, как это применимо к моему набору данных 18x16.
Я новичок в R, поэтому помощь будет очень признательна.
Редактировать:
# newData structure
> str(newData)
num [1:18, 1:16] 0.833 0.833 0.833 0.833 0.833 ...
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr [1:16] "H1" "F1" "H2" "F2" ...
# newData column names
> colnames(newData)
[1] "H1" "F1" "H2" "F2" "H3" "F3" "H4" "F4" "zH1" "zF1" "zH2" "zF2" "zH3" "zF3"
[15] "zH4" "zF4"
cbind
иapply
совершенно бессмысленны и неверны. Вы пытались просто вызвать свою функцию и передать ей два столбцаdata.frame
в качестве аргумента? Действительно похоже, что вы много думали о вещах и читали о них, но что вам действительно нужно сделать, так это попробовать что-то и посмотреть, что получится. Ваш компьютер не взорвется. И это гораздо лучший способ изучить этот материал. - person John   schedule 29.01.2014dim(newData[ c( "zH1","zF1" ) ])
? - person jlhoward   schedule 29.01.2014str(newData)
и опубликуйте результат, желательно как редактирование вашего вопроса. Я предполагаю, что имена столбцов не такие, как вы думаете. Если я наберуnewData<-data.frame(zH1=1:10,zF1=1:10); dim(newData); dim(newData[,c("zH1","zF1")])
, то оба раза получу один и тот же ответ (10,2). - person jlhoward   schedule 29.01.2014str(newData)
иcolnames(newData)
. - person szi   schedule 30.01.2014