首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义函数中的Tidyselect

自定义函数中的Tidyselect
EN

Stack Overflow用户
提问于 2022-05-25 14:57:19
回答 2查看 56关注 0票数 0

我想使用var1:var20 tidyselect语法创建一个自定义函数,该函数可以应用于数据帧中的一系列变量,但我遇到了一个错误。下面是一个基本的例子:

代码语言:javascript
复制
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)

预期的结果(不使用该函数)是:

代码语言:javascript
复制
mtcars %>% 
  mutate(across(mpg:hp, ~ifelse(.x!=0,.x+1,.x)))

使用该函数将导致以下错误消息:

代码语言:javascript
复制
error in test_func(., mpg, hp) : unused argument (hp)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-25 15:07:38

以下是一个潜在的解决方案:

代码语言:javascript
复制
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)

我将您的“其他”arg更改为1000,以突出显示该更改:

代码语言:javascript
复制
                     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

更多关于为什么可以找到这里的信息

票数 2
EN

Stack Overflow用户

发布于 2022-05-25 15:07:49

您可以对您的函数进行以下调整以使其工作:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72379959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档