R使用!!操作符动态赋值报错Error in !`*tmp*` : invalid argument type咨询
错误原因
!!属于tidy evaluation框架的准引用语法糖,仅能在dplyr/rlang提供的支持准引用的函数上下文(如mutate()、summarise()、env_bind()等)中生效,普通全局赋值语句<-的左值位置不支持该注入操作- 你编写的
!!new_v <- ...会被R默认解析为连续两次对new_v执行逻辑取反运算,因此会抛出类型不匹配的报错
解决方案
方案1:使用基础R原生assign()函数(最简洁,无额外依赖)
直接通过原生的动态变量赋值函数实现需求,无需加载dplyr等第三方包:
v <- 'sum.of.ranfx' assign(v, vector(mode = "list", length = 122))
执行完成后即可在当前工作环境生成名为sum.of.ranfx的长度为122的列表变量。
方案2:使用rlang的tidy eval语法实现
如果需要沿用tidy eval的注入逻辑,需要使用支持准引用的环境绑定函数,且动态赋值需用:=操作符替代<-:
library(dplyr) library(rlang) v <- 'sum.of.ranfx' new_v <- sym(v) env_bind( .env = current_env(), !!new_v := vector(mode = "list", length = 122) )
内容的提问来源于stack exchange,提问作者Katie
相关产品推荐
相关产品推荐

