我一直在努力寻找一种在R中运行这一行(在bash中工作)的方法,并且我不断收到有关圆括号的错误...我明白粘贴命令在处理括号时会感到困惑,但我已经尝试转义括号,将它们放在双引号中,如“')'”,但没有任何作用,所以我没有资源。有没有人知道这在R中是如何起作用的?
system(paste("sortBed -i <(awk -v a=1 -v b=2 -v c=3 -v d=4 '{OFS=FS=\"\t\"} {if ($d < 0.5) print \"value\"$a, $b-\"'$d'\", $c+\"'$d'\"}' file.in > file.out", sep=""))
sh: -c: line 0: syntax error near unexpected token `('
答案 0 :(得分:3)
原因似乎是R system()命令调用bourne shell(sh)而不是bourne again shell(bash)。例如,命令
private void dgv_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (!dgv.Columns[e.ColumnIndex].ReadOnly)
{
e.CellStyle.BackColor = Color.Yellow;
}
}
会失败,在此过程中提到bourne shell:
> system("paste <(echo 'Hi')")
一种解决方案是在bourne shell中打印命令并将输出传递给bash:
sh: -c: line 0: syntax error near unexpected token `('
答案 1 :(得分:0)
我从R运行该行时得到的错误与我相同。据我所知,在bash脚本中缺少输出进程替换的最后一个括号,但添加它不会阻止错误。也应该对制表符进行双重转义,以确保反斜杠传递到awk
脚本。
我们在这种情况下发现的一个解决方案是将awk
的输出直接导入sortBed
。
system(paste("awk -v a=1 -v b=2 -v c=3 -v d=4 '{OFS=FS=\"\\t\"} {if ($d < 0.5) print \"value\"$a, $b-\"'$d'\", $c+\"'$d'\"}' file.in | sortBed -i", sep=""))
我们并没有真正让输出流程替换工作,所以如果有人对此有任何建议,那将会很高兴听到。