我需要在R脚本中运行perl命令。我通常会通过以下方式进行操作:
system(paste0('my command'))
但是,我要粘贴的命令包含单引号和双引号以及转义符。具体来说,我想粘贴以下命令:
perl -pe '/^>/ ? print "\n" : chomp' in.fasta | tail -n +2 > out.fasta
我尝试用更多的转义符转义双引号,这使我可以传递命令,但随后打印所有3个转义符,这会导致命令失败。是否有解决此问题的好方法,这样我可以将上面的perl行保存为R中的字符串,然后传递给system()
函数?
答案 0 :(得分:2)
嘿,我还没有测试过您的特定perl
调用(因为它涉及特定的文件/目录等),但是通过转义引号尝试了一些琐碎的事情,它似乎可以正常工作。您可能还想参考this问题。
我的方法,
# shouldnt have any text expect for an empty string
my_text <- try(system(" perl -e 'print \"\n\"' ", intern = TRUE))
my_text
[1] ""
# should contain the string - Hello perl from R!
my_text2 <- try(system(" perl -e 'print \"Hello perl from R!\"' ", intern = TRUE))
my_text2
[1] "Hello perl from R!"
因此,根据以上试验,我认为这应该对您有用-
try(system(command = "perl -pe '/^>/ ? print \"\n\" : chomp' in.fasta | tail -n +2 > out.fasta", intern = TRUE))
注意-intern = TRUE
仅将输出捕获为R中的字符向量。