R:如何使用将函数的输出转换为常量

时间:2015-07-11 22:32:13

标签: r

我们假设我有一些代码行生成一个常量z,然后我在创建函数myFunc时使用它。

y <- 1.5
z <- y * 3

myFunc <- function(x){x * z + 5}

然后保存myFunc以供日后使用。

save(myFunc, file = "C:\\Functions\\myfunc")

但是,当我加载此函数时,它仍然引用z的输出,我在我的环境中可能不再拥有该输出(除非我将zmyFunc一起保存)

我的问题是,在创建myFunc时,是否有某种方法可以合并z而不是对变量的引用?

非常感谢!

2 个答案:

答案 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