R:使用用户输入将函数和参数作为参数传递给高阶函数

R:使用用户输入将函数和参数作为参数传递给高阶函数,r,functional-programming,higher-order-functions,R,Functional Programming,Higher Order Functions,我不确定这是否可行(至少我正试图这样做),但我真的希望如此。我在R中开发了一个相当复杂的测试环境,如果我可以将函数及其相关参数作为参数传递给高阶函数,这将非常有帮助。我可以在不要求用户输入的情况下轻松完成这项工作,但readline()会生成字符串这一事实让我的工作变得有点棘手。这是一个简化版本(请注意,我假设参数输入为一个数值,但实际上,我在实际代码中对数据类型进行错误检查。这只是简化以了解要点): 这很接近,因为它确实在全局环境中为这个_参数赋值12,但我真的希望返回 > read_i

我不确定这是否可行(至少我正试图这样做),但我真的希望如此。我在R中开发了一个相当复杂的测试环境,如果我可以将函数及其相关参数作为参数传递给高阶函数,这将非常有帮助。我可以在不要求用户输入的情况下轻松完成这项工作,但readline()会生成字符串这一事实让我的工作变得有点棘手。这是一个简化版本(请注意,我假设参数输入为一个数值,但实际上,我在实际代码中对数据类型进行错误检查。这只是简化以了解要点):

这很接近,因为它确实在全局环境中为这个_参数赋值12,但我真的希望返回

> read_in()
Enter the name of parameter: this_param
Enter the value for  this_param : 12    
[[1]]
this_param = 12

因此,我可以将此_param=12作为参数传递给另一个高阶函数(除了此_param作为参数的实际函数之外)。同样,与我实际尝试的操作相比,这是非常简单的,即在使用UI而不是手动输入对我的高阶函数的调用时,将一系列函数和相关参数作为参数传递给高阶函数,而高阶函数的调用将非常长且容易出现人为错误。总的来说,弄清楚如何实现我上面列出的目标将极大地帮助我的发展,因此任何意见都将不胜感激。谢谢

使用
do.call
可以将命名列表传递给函数

read_in <- function() {
  temp_nm <- readline(prompt = paste("Enter the name of parameter: "))
  temp_vlu <- as.numeric(readline(prompt = paste("Enter the value for ",temp_nm,": ")))
  setNames(list(temp_vlu), temp_nm)
}

f <- function(x, y, some_param) {
  some_param
}

out <- read_in()
# Enter the name of parameter: some_param
# Enter the value for  some_param : 12
# some_param 
#         12 

do.call('f', out)
# [1] 12

阅读\u您是否查看了范围分配操作符
非常抱歉,我现在就这么做。谢谢你的提醒!!
> read_in()
Enter the name of parameter: this_param
Enter the value for  this_param : 12    
[[1]]
this_param = 12
read_in <- function() {
  temp_nm <- readline(prompt = paste("Enter the name of parameter: "))
  temp_vlu <- as.numeric(readline(prompt = paste("Enter the value for ",temp_nm,": ")))
  setNames(list(temp_vlu), temp_nm)
}

f <- function(x, y, some_param) {
  some_param
}

out <- read_in()
# Enter the name of parameter: some_param
# Enter the value for  some_param : 12
# some_param 
#         12 

do.call('f', out)
# [1] 12