我尝试将逗号分隔的向量解析为命令行参数。但是,我想忽略所有转义的逗号。
即
运行以下内容时
#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,但我也得到了类似的输出......
因此,如果有人可以帮助我忽略转义字符,我将不胜感激。
答案 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