gpt4 book ai didi

r - 函数内 dplyr 的 mutate_each 有效,但matches() 找不到参数

转载 作者:行者123 更新时间:2023-12-04 14:57:36 25 4
gpt4 key购买 nike

尝试解决时 this problem我遇到了 mutate_each 的问题的 dplyr .我想在函数中使用它并将参数传递给它。 funs()成功但不适用于 matches() .

让我展示一个简单的例子,其中的任务是为一些变量的值附加一些标签。

library(dplyr) 
mydf <- data.frame(this_var1 = c("a", "b", "c", "d", "e"),
this_var2 = c("b", "c", "d", "e", "f"),
that_var1 = c("x", "y", "z", "w", "u"))

mymutate1 <- function(data, tag) {
data %>% mutate_each(funs(paste0(., tag)))
}

mymutate1(mydf, "_foo")
this_var1 this_var2 that_var1
1 a_foo b_foo x_foo
2 b_foo c_foo y_foo
3 c_foo d_foo z_foo
4 d_foo e_foo w_foo
5 e_foo f_foo u_foo

这就像一个魅力。但是,如果我还尝试控制应为哪些变量应用转换,则会失败。

mymutate2 <- function(data, tag, m) {
data %>% mutate_each(funs(paste0(., tag)), matches(m))
}
mymutate2(mydf, "_foo", "this")

这给出了以下错误: Error in is.string(match) : object 'm' not found .为什么是 tag找到而 m不是?

代码本身按预期工作:

mydf %>% mutate_each(funs(paste0(., "_foo")), matches("this"))
this_var1 this_var2 that_var1
1 a_foo b_foo x
2 b_foo c_foo y
3 c_foo d_foo z
4 d_foo e_foo w
5 e_foo f_foo u

最佳答案

您将要使用 Standard Evaluation (SE) mutate_each 的版本-- 即 mutate_each_ :

mymutate2 <- function(data, tag, m) {
data %>% mutate_each_(funs(paste0(., tag)), ~matches(m))
}

为了更清楚,以下是等效的:
mymutate3 <- function(data, tag, m) {
data %>% mutate_each_(~paste0(., tag), ~matches(m))
}

根据 vignette :

“最好使用公式 [ ~ 而不是 quote() 或使用字符串 "" ],因为公式捕获要评估的表达式以及应该评估的环境......使用任何东西除了公式之外,它会失败,因为它不知道要查看哪个环境。”

关于r - 函数内 dplyr 的 mutate_each 有效,但matches() 找不到参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28988004/

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