我正在尝试使用mes()
包的compute.es
函数计算ANOVA的效果大小。
mes()
- 函数需要两个组的均值,SD和N.我可以使用by(myDF$var1,myDF$var2, "stat.desc")
函数来获取这些值。此工作流程创建了一个我必须手动复制的表格。将by()
的结果中的值粘贴到mes()
函数中。
这对于一些anovas是可行的,但是我需要再做50个anovas,所以我正在寻找一种方法来以编程方式将这些方法链接在一起。有人知道怎么做吗?
by()
- 方法可以随意更改,只有mes()
方法对我很重要。
简单的例子:
library(compute.es)
library(pastecs)
v1 <- c(1,1,2,2)
v2 <- c(1,2,3,4)
df <- data.frame(v1,v2)
#I would execute this first, look for the values in the output and paste it to mes()
#I am using by() here because I knew it - there is almost certainly a better way...
print(by(df$v2, df$v1, stat.desc))
#I would like to insert these numbers automatically
print(mes(1.50,3.50,0.71,0.71 ,2,2))
答案 0 :(得分:3)
另请注意,by
是一个列表,可以访问各个元素(@scott Ritchie的方法更加精简):
out <- by(df$v2, df$v1, stat.desc)
mes(out[[1]][["mean"]], out[[2]][["mean"]],
out[[1]][["std.dev"]], out[[2]][["std.dev"]],
out[[1]][["nbr.val"]], out[[2]][["nbr.val"]])
在大多数情况下,也不需要在R中显式print
调用。
因此,链接行为是将by
的输出分配给对象(我使用out
)的地方。然后使用索引来从该对象中获取元素。
答案 1 :(得分:2)
您可以通过调用相应的函数以编程方式执行此操作:
mes(mean(df[,1]), mean(df[,2]), sd(df[,1]), sd(df[,2]), nrow(df), nrow(df))