我想在R中运行几个shell命令。
我已经尝试过system()但是我还没有找到如何使用shQuote进行正确的转义。
# works OK
system('ls -a -l')
但我如何在R?
中执行perl -e 'print "test\n"'
或curl --data-urlencode query@biomart.xml http://biomart.org/biomart/martservice/results
之类的命令
更新
对于像perl这样的命令,我不知道如何转义引号,因为它需要引用为字符串,但已经使用了两种类型的引号。
在curl的情况下,问题似乎是在RESTful调用中传递xml与@在shell中工作但不在system()调用中
dat <-system('curl --data-urlencode query@biomart.xml http://biomart.org/biomart/martservice/results', intern=F)
警告:无法从文件&#34; query@biomart.xml"中读取数据,这会使其为空 警告:POST。
该文件是biomart.xml而不是query@biomart.xml
** Update2 **
我用于测试的xml文件是:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Query>
<Query virtualSchemaName = "default" formatter = "TSV" header = "0" uniqueRows = "0" count = "" datasetConfigVersion = "0.6" >
<Dataset name = "hsapiens_gene_ensembl" interface = "default" >
<Filter name = "hgnc_symbol" value = "LDLR"/>
<Attribute name = "external_gene_id" />
</Dataset>
</Query>
答案 0 :(得分:3)
R中的字符串可以用单引号('
)或双引号("
)括起来。
如果要使用单引号和双引号执行命令,例如:
perl -e 'print "test\n"'
那么你为R字符串选择的结果不大 - 因为一对需要以任何方式进行转义。
假设您选择单引号:
system('')
然后我们需要以与换行符相同的方式转义单引号,并使用转义字符\
:
command <- 'perl -e \'print "test\n"\''
system(command)
也可以使用\Unnnnnnnn
或\unnnn
以这种方式对Unicode字符进行编码。或者使用八进制(\nnn
)或十六进制(\xnnn
)。
因此:
atSymbol <- '\u0040' # '\x040' '\100'
如果@
命令中的curl
导致问题,那么对其进行编码应该可以解决问题。
答案 1 :(得分:0)
在此示例中,除了转义'
外,我还必须转义\\
(使用\\\\
),\.
,\G
,{{1 }},但没有\K
\n