You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R函数中通过动态指定变量名返回多个值?

问题:动态返回函数内多个变量的值

我需要编写一个函数,它会生成多个存储计算值的对象,希望能返回所有这些值。实际场景中对象数量会随数据变化,因此我想创建一个包含需返回对象名称的向量,通过求值该向量让函数返回所有对象。

演示代码如下:

v1=runif(50)

takemean1=function(x){
  avg=mean(x)
  std=sd(x)
  return(c(avg,std))
}

text=c("avg","std")

takemean2=function(x){
  avg=mean(x)
  std=sd(x)
  return(c(eval(parse(text=noquote(paste(text))))))
}

takemean1(v1)
takemean2(v1)

takemean1能输出预期结果,但takemean2仅返回std,未返回avg,请问如何调整让takemean2和takemean1输出一致?


解决方法

问题出在paste(text)会把向量c("avg","std")合并成单个字符串"avg std",经过parse后变成一个表达式,eval执行时只会返回表达式里最后一个变量的值(也就是std)。要返回所有变量,需要逐个处理向量中的每个元素,或者直接批量获取变量值。

方法1:用sapply逐个求值变量

修改后的takemean2函数:

takemean2=function(x){
  avg=mean(x)
  std=sd(x)
  return(sapply(text, function(var) eval(parse(text=var))))
}

方法2:用mget批量获取变量(更简洁)

mget可以直接根据变量名称向量,从当前环境中获取对应的变量值,再用unlist转成向量:

takemean2=function(x){
  avg=mean(x)
  std=sd(x)
  return(unlist(mget(text)))
}

修改后运行takemean1(v1)和takemean2(v1),两者输出结果完全一致。


内容的提问来源于stack exchange,提问作者user3806834

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 21:10:20