gpt4 book ai didi

r - 在 tidyeval 函数中制作循环友好的公式界面

转载 作者:行者123 更新时间:2023-12-04 02:29:48 30 4
gpt4 key购买 nike

我正在使用 tidyeval 编写一个简单的函数,我需要将参数传递给公式接口(interface)。虽然我已经设法构建了该函数的工作版本,但它似乎不适用于 for 循环。

函数

foo <- function(data, x, y) {
BayesFactor::ttestBF(
paired = FALSE,
data = data,
formula = rlang::new_formula(rlang::enexpr(y), rlang::enexpr(x))
)
}

foo(mtcars, am, wt)
#> Bayes factor analysis
#> --------------
#> [1] Alt., r=0.707 : 1383.367 ±0%
#>
#> Against denominator:
#> Null, mu1-mu2 = 0
#> ---
#> Bayes factor type: BFindepSample, JZS

使用循环

我也试过这里 !!col.name[i]

df <- dplyr::select(mtcars, am, wt, mpg)
col.name <- colnames(df)

for (i in 2:length(col.name)) {
foo(
data = mtcars,
x = am,
y = col.name[i]
)
}
#> Error in `[.data.frame`(data, , dv): undefined columns selected

最佳答案

如果你想让数据屏蔽函数在列上循环工作,你必须在某些时候进行元编程。

实际上有两种选择:

  • 要么让您的函数接受具有标准评估的字符串。然后在内部将该字符串转换为符号。元编程是内部的。

  • 或者让它接受具有非标准评估的表达式。然后你的调用者必须将字符串转换为符号并取消引用它们。元编程是外部的。

没有办法解决这个问题,除非您要创建一个非标准界面,该界面会因过于神奇而变得不一致且不可预测。

关于r - 在 tidyeval 函数中制作循环友好的公式界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65002089/

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