Синтаксис 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.)

Другие вопросы по тегам