TMO*_*TTM 12 caching r startup
我正在编写一个R
必须加载数据的脚本(显然).数据加载需要花费很多精力(500MB),我想知道每次重新运行脚本时是否可以避免必须完成加载步骤,我在开发过程中做了很多工作.
我很欣赏我可以在交互式R
会话中完成所有工作,但是在R
提示符上开发多行函数就不那么方便了.
例:
#!/usr/bin/Rscript
d <- read.csv("large.csv", header=T) # 500 MB ~ 15 seconds
head(d)
Run Code Online (Sandbox Code Playgroud)
如果可能的话,我如何修改脚本,以便在后续执行时d
已经可用?是否有类似于降价代码块的cache=T
声明R
?
Dir*_*tel 14
有点.有几个答案:
使用更快的csv读取: fread()
在data.table()
包中受到许多人的喜爱.你的时间可能会缩短到一两秒.
类似地,读取一次为csv然后以紧凑的二进制形式写入,saveRDS()
这样下次你可以做的readRDS()
更快,因为你不必再次加载和解析数据.
不要读取数据,而是通过包进行内存映射mmap
.这涉及更多,但可能非常快.数据库在内部使用这种技术.
按需加载,例如包裹SOAR
包在这里很有用.
但是,直接缓存是不可能的.
编辑:实际上,如果您在最后使用R会话保存数据集,则直接缓存"有点".我们中的许多人建议不要这样做,因为明确可重复的脚本使得加载显式最好在我们看来 - 但是R可以通过load()
/ save()
机制帮助(在saveRSS()
readRDS()`处理单个对象时,它会同时批量生成多个对象.