如何在R中将字符串形式的函数赋值语句转为可执行代码?
解决R中执行字符串形式赋值语句的问题
你的代码报错核心原因是直接eval字符串无法正确解析为赋值语句,而且get()的使用逻辑也不对。下面是可行的实现方法:
正确写法示例
先定义测试用的函数(你可以替换成自己的function0和function1):
function0 <- function() { return(100) } function1 <- function(f) { f() }
方法1:用parse()+eval()执行字符串语句
把赋值语句转成字符串后,先通过parse()把字符串解析为R可执行的表达式,再用eval()执行:
# 构建赋值语句字符串 cmd <- "val <- function1(function0)" # 执行语句 eval(parse(text = cmd)) # 之后直接访问变量或用get()获取 val get("val")
方法2:如果需要用paste0()拼接字符串
如果你的语句是动态拼接出来的,用paste0()构建后同样走parse+eval流程:
cmd_str <- paste0("val <- function1(function0)") eval(parse(text = cmd_str)) # 验证结果 get("val")
错误原因说明
你之前的代码get(eval(paste0("val <- function1(function0)")))有两个问题:
eval()直接接收字符串时,R会把这个字符串当成对象名去查找,而不是解析为执行语句,所以会报找不到对象的错误;- 就算正确执行了赋值语句,
eval()返回的是赋值的结果(也就是function1(function0)的输出),而不是变量名"val",get()需要传入变量名的字符串,传入结果自然找不到对应的对象。
内容的提问来源于stack exchange,提问作者user321627
相关产品推荐
相关产品推荐

