我们假设我有一些代码行生成一个常量z
,然后我在创建函数myFunc
时使用它。
y <- 1.5
z <- y * 3
myFunc <- function(x){x * z + 5}
然后保存myFunc
以供日后使用。
save(myFunc, file = "C:\\Functions\\myfunc")
但是,当我加载此函数时,它仍然引用z
的输出,我在我的环境中可能不再拥有该输出(除非我将z
与myFunc
一起保存)
我的问题是,在创建myFunc
时,是否有某种方法可以合并z
的值而不是对变量的引用?
非常感谢!
答案 0 :(得分:1)
为什么不将z
作为参数添加到您的函数中?
myFunc <- function(x,z=5){x*z +5}
myFunc(3)
[1] 20
答案 1 :(得分:0)
您可以更改函数的主体。在您的简单示例中,z可以替换为这样的值(您必须在表达式树中找到z
):
body(myFunc)[[2]][[2]][[3]] <- z
myFunc
# function (x)
# {
# x * 4.5 + 5
# }
或者您可以从已解析的表达式中更改函数体:
body(myFunc) <- parse(text = sprintf("{ x * %f + 5 }", z))
搞乱函数体的方法是在函数中添加一个属性:
myFunc <- function(x){
if(!is.null(attr(myFunc, "z")))
z <- attr(myFunc, "z")
x * z + 5
}
attr(myFunc, "z") <- z