我想分配一个动态名称,即我要传递给该函数的变量的名称,作为该函数正在创建的数据框中的列名。
我尝试过
- deparse(substitute(x))
- toString(x)
但没有成功...
代码
a <- (1:3)
b <- (5:7)
df <- data.frame(a,b)
fun <- function(x){
x %>% mutate(c=a+b)
colnames(x)[3] <- deparse(substitute(x))
}
预期行为
运行fun(df)之后:
a b df
1 1 5 6
2 2 6 8
3 3 7 10
相反:
> fun(df)
Error in names(x) <- value :
'names' attribute [3] must be the same length as the vector [2]
答案 0 :(得分:1)
我们可以将:=
用于评估(!!
)
fun <- function(x){
nm1 <- deparse(substitute(x))
x %>%
mutate(!! nm1 := a+b)
}
fun(df)
# a b df
#1 1 5 6
#2 2 6 8
#3 3 7 10
在OP的函数中,x %>% mutate
的输出未分配回,因此,原始数据集只有两列而不是三列,即如果有的话
fun <- function(x){
nm1 <- deparse(substitute(x))
x <- x %>% # assign the output after mutate
mutate(c=a+b)
colnames(x)[3] <- nm1
x # return the dataset
}
fun(df)
# a b df
#1 1 5 6
#2 2 6 8
#3 3 7 10