命令在R中作为系统调用执行,但不在R中的管道中执行?

时间:2013-09-16 21:40:12

标签: r shell command pipe

我正在学习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到底意味着什么?

0 个答案:

没有答案