我有一个函数f <- function(x){x}
。我想插入该行x <- 2*x
into f
这样它最终会变成
function(x){
x <- 2*x
x
}
我明白我应该使用body()
,但到目前为止我只知道如何替换entire身体,这对于我的真正目的来说并不实用。
这是另一种方法(使用magrittr
简化事情)
f <- function(x){x}
f(2)
# [1] 2
# library(magrittr)
body(f) <- body(f) %>% as.list %>% append(quote(x<-2*x), 1) %>% as.call
f(2)
# [1] 4
或者甚至简单地
body(f) %<>% as.list %>% append(quote(x<-2*x), 1) %>% as.call %>% as.expression
但我觉得我可能缺少一种更简单的方法
您可以编写一个更传统的函数,而无需magrittr
还有...
funins <- function(f, expr = expression(x<-2*x), after=1) {
body(f)<-as.call(append(as.list(body(f)), expr, after=after))
f
}
您可以使用它来插入任何表达式
f <- function(x){x}
g <- funins(f, expression(print("hi"), x<-3*x))
f(2)
# [1] 2
g(2)
# [1] "hi"
# [1] 6
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)