R - 命令行参数中的Escaped逗号

时间:2016-03-09 11:49:19

标签: r command-line-interface

我尝试将逗号分隔的向量解析为命令行参数。但是,我想忽略所有转义的逗号。

运行以下内容时

#test.R
args <- commandArgs(TRUE)
print (args)
print (unlist(strsplit(args, ",", perl=TRUE))) # also doesn't work with perl=FALSE

并运行以下内容:

Rscript test.R "w1,w2\,w3,w4"

这会产生以下输出:

[1] "w1,w2\\,w3,w4"
[1] "w1"   "w2\\" "w3"   "w4"

我期望的输出是:

[1] "w1,w2\,w3,w4"
[1] "w1"   "w2,w3"   "w4"

我也试过了很多库,包括optparse和argparser,但我也得到了类似的输出......

因此,如果有人可以帮助我忽略转义字符,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

也许这有帮助:首先,用不带“,”的字符替换转义序列,例如

args <- "w1,w2\\,w3,w4" #  commandArgs(TRUE)
s1 <- gsub("\\,", "#", args, fixed=TRUE)

然后执行strsplit

s2 <- unlist(strsplit(s1, ","))

最后撤消替换

s3 <- gsub("#", ",", s2) # expected result

这要求你有一个转义字符(在例如“#”中)你确定不会作为参数传递。

更直接的方法是不使用strsplit

pos <- unlist(gregexpr("[^\\\\],", args, perl=TRUE)) # args is as above
substring(args, c(1, pos+2), c(pos,nchar(args))) # expected result