是否可以导出R函数?
假设我们有一个函数,经过一个很长的过程后,返回另一个函数作为输出 仅出于说明目的,请描绘以下功能:是否可以导出R函数?,r,R,假设我们有一个函数,经过一个很长的过程后,返回另一个函数作为输出 仅出于说明目的,请描绘以下功能: f = function() { starting_time = Sys.time() a = 0 while (difftime(Sys.time(), starting_time, units = "days") < 1) { a = a + 1 } g = function(x) { a*x } return(g) }
f = function() {
starting_time = Sys.time()
a = 0
while (difftime(Sys.time(), starting_time, units = "days") < 1) {
a = a + 1
}
g = function(x) {
a*x
}
return(g)
}
f=函数(){
启动时间=系统时间()
a=0
while(difftime(Sys.time(),起始时间,units=“days”)<1){
a=a+1
}
g=函数(x){
a*x
}
返回(g)
}
在我们的示例中,函数f将运行一整天,然后返回函数g。我们可以通过执行my_function=f()将函数g分配给变量
问题是,我希望f只运行一次,以便检索g,然后导出g,这样我就可以共享它,而无需再次运行f。
如果可能的话,我更喜欢不涉及保存工作区的解决方案。我想知道,正如write.csv如何允许我们在不保存工作区的情况下导出数据帧一样,是否有类似的函数来导出函数。您可以使用saveRDS
f = function(x, ...) {
mean(x, ...)
}
saveRDS(f, file='f.rds')
rm(f)
f = readRDS('f.rds')
f(1:3)
# [1] 2
如果要保存函数的文本版本(以便文件可读),可以使用dput
,尽管从文件中恢复函数需要eval(parse))
writers
可以写入任何R对象。您的功能可能存在环境问题。。。它可能不仅仅依赖于对象。我不确定saveRDS
在多大程度上解释了这一点,或者在您的特殊情况下这是否重要。需要帮助吗?
dput(f, file='f.txt')
g = eval(parse(text = readLines('f.txt')))
g(1:3)
# [1] 2