最近做的项目,需要从用户手里拿到一个 R 对象文件,姑且叫 out.rdata,后台要从这个 out.rdata 中取出一个叫 fuck 的对象。原来一直是用load('out.rdata')
这种方式加载,没发现问题,直到昨天发现一个报错的记录:
|
|
放狗一搜,发现这篇文章:
https://yihui.name/en/2017/12/save-vs-saverds/
猜测可能用户是用saveRDS()
方法保存的数据,于是对应的,用readRDS()
加载就正常了。
但谁知道用户爸爸哪天心情好又换save()
存咋办?
所以需要做个判断:如果是save()
保存的数据,用load()
;如果是saveRDS()
保存的,则用readRDS()
。
那么问题来了,怎么判断*.rdata
的保存方式方法?
继续放狗,未果
换思路,Try...Catch 之:先load()
扑街了再用readRDS()
,代码如下:
R 的tryCatch
写起来好丑陋。。。
|
|
搞定!
贴个参考文章的好评论
Great post! If you really want to use
save()
and then want load it back, useattach()
instead ofload()
. The former will warn you about overwriting. Also you can unload it withdetach("file:foo.RData")
.