自定义函数中的 Tidyselect
Tidyselect in custom function
我想创建一个自定义函数,我可以使用 var1:var20
tidyselect 语法将其应用于数据框中的一系列变量,但我 运行 出错了。下面是一个基本示例:
library(dplyr)
mtcars
test_func <- function(start_var,end_var) {
mutate(across(start_var:end_var, ~ifelse(.x!=0,.x+1,.x)))
}
mtcars %>% test_func(mpg,hp)
预期结果(不使用函数)是:
mtcars %>%
mutate(across(mpg:hp, ~ifelse(.x!=0,.x+1,.x)))
使用该函数会导致以下错误消息:
error in test_func(., mpg, hp) : unused argument (hp)
这是一个可能的解决方案:
library(dplyr)
test_func <- function(data, start_var, end_var) {
data %>%
mutate(across({{start_var}}:{{end_var}}, ~ifelse(.x!=0,.x+1000,.x)))
}
mtcars %>%
test_func(mpg, hp)
我将您的“else”参数更改为 1000 以突出显示更改:
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 1021.0 1006 1160 1110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 1021.0 1006 1160 1110 3.90 2.875 17.02 0 1 4 4
Datsun 710 1022.8 1004 1108 1093 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 1021.4 1006 1258 1110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 1018.7 1008 1360 1175 3.15 3.440 17.02 0 0 3 2
可以找到有关此工作原理的更多信息here
您可以对函数进行以下调整以使其正常工作:
test_func <- function(data, start_var, end_var) { # add data source to the function
data %>% mutate(across({{start_var}}:{{end_var}}, ~ifelse(.x!=0,.x+1,.x))) # add {{}}
}
test_func(mtcars, mpg, hp)
我想创建一个自定义函数,我可以使用 var1:var20
tidyselect 语法将其应用于数据框中的一系列变量,但我 运行 出错了。下面是一个基本示例:
library(dplyr)
mtcars
test_func <- function(start_var,end_var) {
mutate(across(start_var:end_var, ~ifelse(.x!=0,.x+1,.x)))
}
mtcars %>% test_func(mpg,hp)
预期结果(不使用函数)是:
mtcars %>%
mutate(across(mpg:hp, ~ifelse(.x!=0,.x+1,.x)))
使用该函数会导致以下错误消息:
error in test_func(., mpg, hp) : unused argument (hp)
这是一个可能的解决方案:
library(dplyr)
test_func <- function(data, start_var, end_var) {
data %>%
mutate(across({{start_var}}:{{end_var}}, ~ifelse(.x!=0,.x+1000,.x)))
}
mtcars %>%
test_func(mpg, hp)
我将您的“else”参数更改为 1000 以突出显示更改:
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 1021.0 1006 1160 1110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 1021.0 1006 1160 1110 3.90 2.875 17.02 0 1 4 4
Datsun 710 1022.8 1004 1108 1093 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 1021.4 1006 1258 1110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 1018.7 1008 1360 1175 3.15 3.440 17.02 0 0 3 2
可以找到有关此工作原理的更多信息here
您可以对函数进行以下调整以使其正常工作:
test_func <- function(data, start_var, end_var) { # add data source to the function
data %>% mutate(across({{start_var}}:{{end_var}}, ~ifelse(.x!=0,.x+1,.x))) # add {{}}
}
test_func(mtcars, mpg, hp)