我不确定这是否可行(至少我尝试这样做的方式),但我真的希望如此。我有一个非常复杂的测试环境,我正在R中开发它,如果我可以将函数及其相关参数作为高阶函数的参数传递的话,这真的很有帮助。我可以做到这一点而无需足够容易地要求用户输入,但是readline()产生字符串的事实使我尝试做的事情有些棘手。这是一个简化的版本(请注意,我为参数输入假设一个数值,但实际上,我正在对我的真实代码中的数据类型进行错误检查。这只是为了使理解更简单)。
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,": ")))
assign(temp_nm,temp_vlu,envir = .GlobalEnv)
temp_param <- as.name(temp_nm)
temp_params <- list(temp_param)
return(temp_params)
}
我知道这不太起作用,因为它返回以下内容:
> read_in()
Enter the name of parameter: this_param
Enter the value for this_param : 12
[[1]]
this_param
这很接近,因为它确实在全局环境中为this_param分配了12的值,但是我真的希望返回
> read_in()
Enter the name of parameter: this_param
Enter the value for this_param : 12
[[1]]
this_param = 12
因此,我可以将this_param = 12作为参数传递给另一个高阶函数(除了this_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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句