R语言如何将函数入参赋值为数据框新增列的变量名
错误原因说明
你使用assign()的逻辑不符合R的语法规则:assign()是用来向指定执行环境绑定独立变量的,你拼接的data$newvar本质是字符串,assign()只会把它当成独立变量名创建,不会识别为「data数据框的newvar列」,自然不会修改原数据框的结构。
解决方案
Base R 方案
直接用双括号索引的方式给数据框动态赋值新列即可,这是最简洁的原生方案:
fun <- function(varname) { data <- data.frame(a = c(1,2,3)) # 动态列名赋值用[[索引即可 data[[varname]] <- sqrt(data$a) return(data) } # 测试 fun("newvar")
返回结果:
a newvar 1 1 1.000000 2 2 1.414214 3 3 1.732051
Tidyverse 方案
用dplyr的:=运算符配合.data代词即可实现动态列名创建,写法更符合tidy语法规范:
library(dplyr) fun <- function(varname) { data <- data.frame(a = c(1,2,3)) %>% mutate(.data[[varname]] := sqrt(a)) return(data) } # 测试 fun("newvar")
返回结果和Base R方案完全一致。
内容的提问来源于stack exchange,提问作者bill999
相关产品推荐
相关产品推荐

