我显然仍然不理解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。那为什么会这样?非常感谢。
答案 0 :(得分:2)
dlply
将df
拆分为多个数据框。这意味着,无论您向dply
移交的任何功能都必须将数据帧作为输入。 t.test
期望一个向量作为它的第一个参数。
dlply
中的匿名函数声明d
为唯一参数。但是,在您致电t.test
时,您只会通过y
。 R不会自动知道在y
的数据框d 中查找。因此,它可能会找到您在全局环境中定义的y
。
在第一个示例中将其更改为t.test(d$y,mu = 0)
应该可以使其正常工作。
第二个示例仅在要应用的函数期望数据帧作为输入时才有效。 (即见summarise
或transform
。)