【问题标题】:Is it possible to export an R function?是否可以导出 R 函数?
【发布时间】:2021-05-02 17:31:03
【问题描述】:

假设我们有一个函数,在一个非常长的过程之后,返回另一个函数作为输出。

仅为了说明目的,请描绘以下功能:

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。 p>

如果可能的话,我希望有一个不涉及保存工作区的解决方案。我想知道,就像 write.csv 允许我们在不保存工作空间的情况下导出数据帧一样,是否有类似的函数来导出函数。

【问题讨论】:

  • writeRDS 可以写任何 R 对象。您的函数可能存在环境问题...它可能不仅仅取决于对象。我不确定saveRDS 对此的解释如何,或者在您的特定情况下是否重要。

标签: r


【解决方案1】:

你可以使用 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

【讨论】:

    猜你喜欢
    • 2020-10-31
    • 1970-01-01
    • 2018-02-27
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 2019-08-30
    • 2021-05-22
    • 1970-01-01
    相关资源
    最近更新 更多