如何为R包动态保存数据



我想在函数内保存动态数据或数据帧(因为它取决于参数(,并想在另一个函数中使用此保存的数据。我曾想过使用saveRDS((,但由于我在本地工作,当我公开它时,我不知道它是否有效。我检查时没有收到任何错误、警告或注释,但我正在寻找更好的解决方案。

get_data <- function(startDate,endDate){

df <- ... # dynamic

saveRDS(df,"df.rds")

}
funcx <- function(){

df2 <- readRDS("df.rds")

}

提前谢谢。

1(如注释中所述,只需使用第一个函数的返回值和第二个函数的参数来传递数据。

get_data <- function(startDate, endDate) {
data.frame(startDate, endDate)
}
funcx <- function(df){
print(df)
}
get_data(1, 2) |> funcx()

或者将数据存储在您的工作空间中,然后从那里获取:

Data <- get_data(1, 2)
funcx(Data)

或者将其放入选项

options(Data = get_data(1, 2))
funcx(getOption("Data"))

2(使用本地环境:

e <- local({
df <- NULL
get_data <- function(startDate, endDate) {
df <<- data.frame(startDate, endDate)
}
funcx <- function(){
print(df)
}
environment()
})
e$get_data(1, 2)
e$funcx()

或者把环境放在包装里。查看lattice包中的lattice.optionslattice.getOption源代码,以获取使用的示例。LatticeEnv环境,该环境直接存储在包本身中。

library(lattice)
ls(lattice:::.LatticeEnv)
lattice.options # displays source code of lattice.options
lattice.getOption # displays source code

3(proto包可以用来清理(2(一点。原型对象是有自己方法的环境。请参阅软件包小插曲和帮助文件。

library(proto)
p <- proto(
get_data = function(., startDate, endDate) {
.$df <- data.frame(startDate, endDate)
},
funcx = function(.) {
print(.$df)
}
)
p$get_data(1, 2)
p$funcx()

最新更新