Синтаксис dlply с t.test
Я ясно все еще не понимаю синтаксис plyr, как показано ниже. Может ли кто-нибудь помочь мне увидеть, что мне не хватает?
Следующий код работает нормально, как и ожидалось:
# make a data frame to use dlply on
f <- as.factor(c(rep("a", 3), rep("b", 3)))
y <- rnorm(6)
df <- data.frame(f=f, y=y)
# split the data frame by the factor and perform t-tests
l <- dlply(df, .(f), function(d) t.test(y, mu=0))
Тем не менее, следующее вызывает ошибку
l_bad <- dlply(df, .(f), t.test, .mu=0)
Error in if (stderr < 10 * .Machine$double.eps * abs(mx)) stop("data are essentially constant") : missing value where TRUE/FALSE needed
Который выглядит немного так, как будто R пытается выполнить t.test по фактору. С чего бы это? Большое спасибо.
1 ответ
dlply
расколы df
в несколько кадров данных. Это означает, что какую бы функцию вы ни передавали dply
должен ожидать фрейм данных в качестве входных данных. t.test
ожидает вектор в качестве первого аргумента.
Ваша анонимная функция в dlply
объявляет d
как единственный аргумент. Но тогда в вашем звонке t.test
Вы проходите только y
, R не знает автоматически, чтобы искать в кадре данных d для y
, Так что вместо этого, вероятно, найти y
что вы определили в глобальной среде.
Просто изменив это на t.test(d$y,mu = 0)
в вашем первом примере это должно работать.
Второй пример будет работать только в том случае, если применяемая функция ожидает фрейм данных в качестве входных данных. (то есть см. summarise
или же transform
.)