2016-03-09 44 views
0

我試圖將逗號分隔的向量解析爲命令行參數。但是,我想忽略所有逃脫的逗號。R - 命令行參數中的逗號逗號

I.e.

當運行以下

#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

也許這有幫助:首先,用不帶「,」的字符替換轉義序列,例如,

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 
+0

非常感謝,但我想知道是否有這樣的「純」 R的方式 - 即沒有做一個變通......如果沒有其他人提出某些問題,我會接受答案。 –

+0

爲更強大的解決方案更新了答案。 –