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