gpt4 book ai didi

r - 在调用 ezANOVA : How do I parameterize the dv? 的自定义 R 函数中

转载 作者:行者123 更新时间:2023-12-02 21:12:37 26 4
gpt4 key购买 nike

我正在尝试在函数中使用 ez 包中的 ezANOVA,在该函数中我希望允许使用参数指定 dv。通常,ezANOVA 会接受列变量作为符号或字符串(请参阅下面的“此方法”)。但是,尝试为 ezANOVA 提供包含符号或字符的参数是行不通的(请参阅下面的“这行不通”)。 ezANOVA 提示““the_dv”不是提供的数据框中的变量”。我尝试过用 as.symbol()、as.formula() 等各种方法包装变量名,甚至尝试了各种方法来合并 eval() 和 Replacement(),但都没有成功。这是如何实现的?

如果它的原因有帮助,我有一个项目,我需要进行许多复合分析(均值、方差分析、事后分析、图表),这些分析与所分析的数据集或变量相同。我想要一个函数,这样我就可以编写一次并运行它多次。下面的代码只是一个简单的示例。

library(ez)

df<-data.frame(ID=as.factor(101:120),
Training=rep(c("Jedi", "Sith"), 10),
Wins=sample(1:50, 20),
Losses=sample(1:50, 20))

# ----------
# This Works
# ----------

myfunc1 <- function(the_data) {
ezANOVA(
data = the_data,
wid = ID,
dv = Wins,
between = Training
)
}

myfunc1(the_data = df)

# ------------------
# This Does Not Work
# -------------------

myfunc2 <- function(the_data, the_dv) {
ezANOVA(
data = the_data,
wid = ID,
dv = the_dv,
between = Training
)
}

myfunc2(the_data = df, the_dv = Wins) # 'Wins' also fails

最佳答案

必须自己解决这个问题。事实证明,eval() 和 Replace() 的组合解决了这个难题:

# ----------------------------------
# Aha, it works!
# ----------------------------------

library(ez)

df<-data.frame(ID=as.factor(101:120),
Training=rep(c("Jedi", "Sith"), 10),
Wins=sample(1:50, 20),
Losses=sample(1:50, 20))

myfunc2 <- function(the_data, the_dv) {
eval(
substitute(
ezANOVA(data = the_data,
wid = ID,
dv = the_dv,
between = Training),
list(the_dv = the_dv)))
}

myfunc2(the_data = df, the_dv = 'Wins')
myfunc2(the_data = df, the_dv = 'Losses')

享受吧!!

关于r - 在调用 ezANOVA : How do I parameterize the dv? 的自定义 R 函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32616639/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com