将输出从一个函数链接到另一个函数?

时间:2014-05-26 12:42:18

标签: r anova

我正在尝试使用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))

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))