2015-07-11 38 views
2

假设我有一些代码行可以产生一个常量z,然后我用它来创建一个函数myFuncR:如何使用将函数的输出转化为常量

y <- 1.5 
z <- y * 3 

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

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

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

当我打开这个功能,但是,它仍然是引用的z输出,这点我可以不再在我的环境(除非我救zmyFunc一起)。

我的问题是,创造myFunc的时候,有没有一些办法纳入值的z,而不是在变量的引用

非常感谢!

回答

1

为什么不添加z作为您的函数的参数?

myFunc <- function(x,z=5){x*z +5} 
myFunc(3) 
[1] 20 
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 
+0

谢谢!使用解析函数工作。 –

相关问题