gpt4 book ai didi

r - 如何正确地从 R 内部转义系统调用

转载 作者:行者123 更新时间:2023-12-04 10:08:28 24 4
gpt4 key购买 nike

我有几个要在 R 中运行的 shell 命令。

我试过 system() 但我还没有找到如何进行正确的转义,即使是使用 shQuote。

# works OK
system('ls -a -l')

但我如何执行像 perl -e 'print "test\n"'curl --data-urlencode query@biomart.xml http://biomart.org 这样的命令/biomart/martservice/results 在 R 中?

更新:

对于像 perl 示例这样的命令,我不知道如何转义引号,因为它需要作为字符串引用,但已经使用了两种类型的引号。

在 curl 的情况下,问题似乎出在 RESTful 调用中以在 shell 中有效但在 system() 调用中无效的 @ 传递 xml

dat <-system('curl  --data-urlencode query@biomart.xml http://biomart.org/biomart/martservice/results', intern=F)

Warning: Couldn't read data from file "query@biomart.xml", this makes an empty Warning: POST.

文件是 biomart.xml 不是 query@biomart.xml

** 更新 2**

我用于测试的 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>

最佳答案

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 命令中的 @ 导致了问题,像这样编码应该可以解决问题。

关于r - 如何正确地从 R 内部转义系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25985481/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com