是否可以导出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