提问人:Andrew 提问时间:9/21/2022 最后编辑:aynberAndrew 更新时间:3/24/2023 访问量:510
R 用户函数列名称选择,带或不带引号
R user function column name selection with or without quotes
问:
我希望能够在用户函数中输入 tibble 的列名,无论是否使用引号。使用下面的 myfunc 函数,我可以输入列名,但无法将其封装在“”中。有没有办法在单个用户定义的函数中使用这两种方法?
myfunc <- function(dat, col1){
dat %>%
mutate(col2 = {{ col1 }}+1)
}
# ok
myfunc(iris, Sepal.Length)
# error
myfunc(iris, "Sepal.Length")
答:
1赞
Maël
9/21/2022
#1
您可以使用 和 将字符变量转换为不带引号的变量,同时不更改已带引号的变量:as.name
substitute
myfunc <- function(dat, col1){
col1 <- as.name(substitute(col1))
dat %>%
mutate(col2 = {{col1}} + 1)
}
输出
all.equal(myfunc(iris, Sepal.Length),
myfunc(iris, "Sepal.Length"))
#[1] TRUE
评论
0赞
Andrew
9/21/2022
伟大。谢谢你,梅尔。知道如何一次处理 1 列以上吗?我尝试使用 map_df(c(“Sepal.Length”, “Sepal.Width”), ~myfunc(iris, .x)) 但出现错误“错误:!计算时出现问题。由错误引起:!找不到对象“.x””mutate()
col2 = .x + 1
评论