当R中有嵌套函数时,如何在R中以编程方式创建函数?

当R中有嵌套函数时,如何在R中以编程方式创建函数?,r,metaprogramming,rlang,R,Metaprogramming,Rlang,我的目标是使用代码创建以下函数: s <- c(x = 10) a <- c(i = 3) model <- function(s, a) { with(as.list(c(s, a)), { y <- x * i y * 10 }) } model(s, a) s不确定您在此处使用新功能的动机,但这会给出您的预期输出: library(rlang) s <- (x = 10) a <- (i = 3) foo <- n

我的目标是使用代码创建以下函数:

s <- c(x = 10)
a <- c(i = 3)

model <- function(s, a) {
  with(as.list(c(s, a)), {
    y <- x * i
    y * 10
  })
}

model(s, a)

s不确定您在此处使用
新功能的动机,但这会给出您的预期输出:

library(rlang)

s <- (x = 10)
a <- (i = 3)

foo <- new_function(
  args = pairlist2(s =, a =),
  body = expr(
    with(as.list(c(s, a)), {
      y <- x * i
      y * 10
    })
  )
)

foo(s, a)
#[1] 300

不确定您在此处使用
新函数的动机,但这会给出您的预期输出:

library(rlang)

s <- (x = 10)
a <- (i = 3)

foo <- new_function(
  args = pairlist2(s =, a =),
  body = expr(
    with(as.list(c(s, a)), {
      y <- x * i
      y * 10
    })
  )
)

foo(s, a)
#[1] 300

使用base R,您可以执行以下操作:


foo使用base R,您可以执行以下操作:


我看不出动机。为什么不只是
model为什么要这样编写函数?为什么不直接把
s
a
作为
new_函数的参数呢?原因是我从其他软件中得到了方程,它们以字符串的形式出现。我看不到动机。为什么不只是
model为什么要这样编写函数?为什么不直接将
s
a
作为参数放入
new_函数
中呢?其动机是我从其他软件中获得了方程,它们以字符串的形式出现。
foo2 <- new_function(
  args = pairlist2(s =, a =),
  body = parse_expr(
    "with(as.list(c(s, a)), {
      y <- x * i
      y * 10
    })"
  )
)

foo2(s, a)
#[1] 300