使用t.test的dlply语法

时间:2012-03-10 21:04:52

标签: r plyr

我显然仍然不理解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 个答案:

答案 0 :(得分:2)

dlplydf拆分为多个数据框。这意味着,无论您向dply 移交的任何功能都必须将数据帧作为输入t.test期望一个向量作为它的第一个参数。

dlply中的匿名函数声明d为唯一参数。但是,在您致电t.test时,您只会通过y。 R不会自动知道在y的数据框d 中查找。因此,它可能会找到您在全局环境中定义的y

在第一个示例中将其更改为t.test(d$y,mu = 0)应该可以使其正常工作。

第二个示例仅在要应用的函数期望数据帧作为输入时才有效。 (即见summarisetransform。)