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

如何在R语言中多次评估函数参数传入的表达式?

R语言循环中重复执行表达式参数的问题

问题重现

我定义了一个接收表达式作为参数的函数,直接调用时能正常执行表达式:

myFUN <- function(x) eval(quote(x))

myFUN(x = {
  print(1 + 3)
  print(mean(mtcars$mpg))
})

输出符合预期:

[1] 4
[1] 20.09062

但把评估逻辑放进循环后,原本期望循环执行5次就重复评估5次表达式,结果却只执行了一次:

myFUN <- function(x){
  for(i in 1:5){
    eval(quote(x))
  }
}

myFUN(x = {
  print(1 + 3)
  print(mean(mtcars$mpg))
})

实际输出:

[1] 4
[1] 20.09062

我期望的输出是重复5次执行结果:

[1] 4
[1] 20.09062
[1] 4
[1] 20.09062
[1] 4
[1] 20.09062
[1] 4
[1] 20.09062
[1] 4
[1] 20.09062

问题原因

quote(x)在这里只捕获了参数x的符号,而不是传入的代码块本身。第一次eval(quote(x))时,R会求值x,也就是执行传入的表达式并输出结果;后续循环中再执行eval(quote(x)),x已经被求值过,不会再重复执行原表达式,自然没有新的输出。

解决方案

用substitute()替代quote(),它能直接捕获传入的表达式内容,而不是参数符号。修改后的函数如下:

# 方式1:先捕获表达式再循环执行
myFUN <- function(x){
  expr <- substitute(x)
  for(i in 1:5){
    eval(expr)
  }
}

# 方式2:循环内直接捕获并执行
myFUN <- function(x){
  for(i in 1:5){
    eval(substitute(x))
  }
}

调用修改后的函数,就能得到期望的重复执行结果。

内容的提问来源于stack exchange,提问作者Wencheng Lau-Medrano

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 17:32:26