返回

r-使从stdin读取RDS独立于文件是否通过管道创建

发布时间:2022-03-07 21:34:13 217
readRDS=function(file = pipe('cat', 'rb'), ...) {
    base::readRDS(file, ...)
}
saveRDS=function(object, file = pipe('cat', 'wb'), ...) {
    base::saveRDS(object, file, ...)
}

我使用上述函数从stdin读取RDS文件,并将RDS文件写入stdout。

如下所示,一个readRDS调用有效,另一个无效。这取决于rds文件是否使用管道编写。

$ lr -e 'source("saveRDS.R"); saveRDS(1:3, file="/tmp/readRDS.rds");'
$ lr -e 'source("readRDS.R"); print(readRDS());' < /tmp/readRDS.rds
Error in base::readRDS(file, ...) : unknown input format
$ lr -e 'source("saveRDS.R"); saveRDS(1:3);' > /tmp/readRDS.rds
$ lr -e 'source("readRDS.R"); print(readRDS());' < /tmp/readRDS.rds
[1] 1 2 3

为什么这取决于文件的编写方式?有没有办法让stdin中的readRDS始终工作,无论文件是否通过管道写入?

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
相关帖子
下一篇
Regex初学者格式 2022-03-07 20:42:23