R 根据外部函数中确定的值执行内部函数

R 根据外部函数中确定的值执行内部函数,r,rlang,R,Rlang,我们试图让所有用户编写一个函数,该函数将根据运行时可用的变量执行(这是一个模拟上下文) 用户使用“函数声明器”来“声明”内部函数。稍后,当调用外部函数时,所需的信息(myvar)可用。但我们只是不知道如何将它赋给声明的变量 如果可能,我们希望使用rlang/tidyverse样式的工具来解决这个问题。提前谢谢 library(rlang) function_declarer <- function(expr) { function() { eval(expr) } }

我们试图让所有用户编写一个函数,该函数将根据运行时可用的变量执行(这是一个模拟上下文)

用户使用“函数声明器”来“声明”内部函数。稍后,当调用外部函数时,所需的信息(myvar)可用。但我们只是不知道如何将它赋给声明的变量

如果可能,我们希望使用rlang/tidyverse样式的工具来解决这个问题。提前谢谢



library(rlang)

function_declarer <- function(expr) {
  function() {
    eval(expr)
  }
}

inner_function <- function_declarer(mean(my_var))

outer_function <- function(step) {
  my_var <- c(5, 6, 7)
  # environment(step) <- env_clone(environment(step), parent = current_env()) # know this does not work
  step()
}

outer_function(inner_function)


图书馆(rlang)

函数_declarer似乎您可以获取未计算的表达式,然后使用
eval
和本地环境对其进行计算

library(rlang)

function_declarer <- function(expr) {
  enexpr(expr)
}

inner_function <- function_declarer(mean(my_var))

outer_function <- function(step) {
  my_var <- c(5, 6, 7)
  eval(step)
}

outer_function(inner_function)
库(rlang)

函数_declarer似乎您可以获取未计算的表达式,然后使用
eval
和本地环境对其进行计算

library(rlang)

function_declarer <- function(expr) {
  enexpr(expr)
}

inner_function <- function_declarer(mean(my_var))

outer_function <- function(step) {
  my_var <- c(5, 6, 7)
  eval(step)
}

outer_function(inner_function)
库(rlang)

这个问题的答案很好,值得一试,尽管我不得不承认我觉得整个设置有点奇怪。编写一个以
my\u var
为参数的函数有什么不对?是否有一些我遗漏的微妙的用例需要这种复杂性?(也许这比你更适合问OP)@AllanCameron。我同意,编写函数可能是处理这个问题的更合理的方法。我想它避免了必须有一个特定的匹配函数签名的开销,但是您仍然需要知道所有“神奇”变量名。我认为这是一个受tidyverse启发的东西,每个人都想编写函数,而必须键入“function”并将列名作为不带引号的符号传递。我想这是一个很有风格的问题。这个问题的解决方案很好,值得一试,尽管我不得不承认我觉得整个设置有点奇怪。编写一个以
my\u var
为参数的函数有什么不对?是否有一些我遗漏的微妙的用例需要这种复杂性?(也许这比你更适合问OP)@AllanCameron。我同意,编写函数可能是处理这个问题的更合理的方法。我想它避免了必须有一个特定的匹配函数签名的开销,但是您仍然需要知道所有“神奇”变量名。我认为这是一个受tidyverse启发的东西,每个人都想编写函数,而必须键入“function”并将列名作为不带引号的符号传递。我想这是一个时尚的东西。整个设置似乎不必要的复杂。将
mean
函数传递给外部函数,
run
,并将变量传递给函数:
run,这整个设置似乎不必要地复杂。只将
mean
函数传递给外部函数,
run
,并将变量传递给函数:
run,有什么不对