我正在学习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
通过Google搜索此消息会让我在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
到底意味着什么?