是否可以导出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 将运行一整天,然后返回函数 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))

dput(f, file='f.txt')
g = eval(parse(text = readLines('f.txt')))
g(1:3)
# [1] 2


以上是是否可以导出R函数?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>