【问题标题】:Chaining output from one function to another?将一个函数的输出链接到另一个函数?
【发布时间】:2014-05-26 12:42:17
【问题描述】:

我正在尝试使用 compute.es 包的 mes() 函数计算 ANOVA 的效果大小。 mes()-函数需要两组的均值 SD 和 N。我可以使用by(myDF$var1,myDF$var2, "stat.desc") 函数获得这些值。此工作流创建一个表,我必须手动将值从 by() 的结果复制并粘贴到 mes() 函数。

这对于几个 anova 是可行的,但我需要做 50 个额外的 anova,所以我正在寻找一种方法来以编程方式将这些方法链接在一起。有人知道如何做到这一点吗? 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))

【问题讨论】:

  • 一个可重复的例子将大大有助于帮助那些想在这里提供帮助的人。
  • @AriB.Friedman 你完全正确-请原谅遗漏

标签: r anova


【解决方案1】:

还要注意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)。然后使用索引从该对象中获取元素。

【讨论】:

  • 谢谢!我接受了 Scotts 的回答,因为它更干净,但我会尽量记住您的解决方案以供将来参考。
【解决方案2】:

您可以通过调用适当的函数以编程方式执行此操作:

mes(mean(df[,1]), mean(df[,2]), sd(df[,1]), sd(df[,2]), nrow(df), nrow(df))

【讨论】:

  • 呃,这很简单——我可以扇自己一巴掌,因为我没有立即想到它......
  • 我们都有这样的日子
猜你喜欢
  • 2021-12-31
  • 2022-01-04
  • 1970-01-01
  • 2020-10-20
  • 1970-01-01
  • 1970-01-01
  • 2022-12-09
  • 2013-03-25
  • 2023-04-06
相关资源
最近更新 更多