我刚刚学习 R,我对我的 R 脚本中这些行的结果感到非常困惑:
myfunction <- function(pdbid,t,d,tabledir) {
command <- sprintf("sh ../addMeta.sh %s/tool%d-*-data%d-*/%s*.stats-table | tail -n +2",tabledir,t,d,pdbid)
print(command)
result <- read.table(pipe(command))
}
上述函数针对参数“pdbid”的多个实例运行,如下所示:
t3 <- apply(pdbids, 2, function(x) myfunction(as.character(x),t,d,as.character("somedironmymachine")))
当我运行 R 脚本时,我得到一个错误:
Error in pipe(command) : invalid 'description' argument
谷歌搜索这条消息导致我在 Stack Overflow 上遇到两个非常不同的问题,并且对这条消息的含义没有任何启示。不过我觉得应该是管道的问题,看了下管道中的命令,所以我在上面打印了,看起来不错
[1] "sh ../5_runs/addMeta.sh ../5_runs/10-subopts-layers-alltools//tool2-*-data4-*/1DK1*.stats-table | tail -n +2"
[2] "sh ../5_runs/addMeta.sh ../5_runs/10-subopts-layers-alltools//tool2-*-data4-*/1ET4*.stats-table | tail -n +2"
[3] "sh ../5_runs/addMeta.sh ../5_runs/10-subopts-layers-alltools//tool2-*-data4-*/1F1T*.stats-table | tail -n +2"
[4] "sh ../5_runs/addMeta.sh ../5_runs/10-subopts-layers-alltools//tool2-*-data4-*/1I6U*.stats-table | tail -n +2"
[..]
并且这些命令中的每一个都可以在 R 之外的命令行上正常运行。
$ sh ../5_runs/addMeta.sh ../5_runs/10-subopts-layers-alltools//tool2-*-data4-*/2GDI*.stats-table | tail -n +2
-> correct result table from addMeta.sh
即使在 R 内部,如果我用它调用它也能正常运行system(command)
- 那么有什么问题pipe
呢?此外,在过去,我之前曾将这种pipe(command)
方法用于非常相似(特殊字符、链接命令)的命令,并且它按预期工作,尽管我从未使用过它通过apply
.
如何进一步调试此问题?我用apply
错了吗?如果是这样,为什么命令输出正确并且运行没有错误?可能是一些转换/数据格式问题吗?如果是这样,为什么它适用于system()
,而不适用于pipe()
?有没有办法使用的输出system()
来读取数据作为解决方法?R 中是否有pipe()
我不知道的限制?神秘的错误信息invalid 'description' argument
到底是什么意思?