2011-09-09 140 views
7

stringrstr_split文檔狀態的模式參數:不一致的行爲strsplit

如果「」分裂成單個字符。

這表明它在這方面的行爲與strsplit相同。然而,

library(stringr) 
str_split("abcab","") 
[[1]] 
[1] "" "a" "b" "c" "a" "b" 

與領先的空字符串。與此相比,

strsplit("abcab","") 
[[1]] 
[1] "a" "b" "c" "a" "b" 

領先的空字符串似乎是在非空字符串分割時的正常行爲,

strsplit("abcab","ab") 
[[1]] 
[1] "" "c" 

但即使是這樣,str_split產生「額外」尾隨空字符串:

str_split("abcab","ab") 
[[1]] 
[1] "" "c" "" 

這種差異是文檔中的錯誤,功能,錯誤還是隻是「預期行爲」的不同概念?

+1

或許會更好地向開發人員提交錯誤報告,而不是在stackoverflow上詢問... – hadley

+1

對不起@hadley,我基本上從來沒有想到我找到了一個錯誤。我的自尊心很低。 – joran

+0

這可能不是一個錯誤,而是根據給定分隔符*分割字符串的不同解釋。 (關於'預期行爲'的不同概念) 如果你用分隔符** ab **分割字符串** abcab **,那麼我希望結果是''和'c', '。但是,並不是所有的程序員都以同樣的方式解釋這一點。 –

回答

4

如果使用逗號分隔符,「預期」(您的里程可能會發生變化)的結果是比較明顯的:

# expect "" "2" "3" "4" "" 

strsplit(",2,3,4,", ",") 
# [[1]] 
# [1] "" "2" "3" "4" 

str_split(",2,3,4,", ",") 
# [[1]] 
# [1] "" "2" "3" "4" "" 

如果我有n逗號那麼我期望返回(n+1)元素。所以我更喜歡str_split的結果。不過,我不一定會以此爲標榜調用中的錯誤strsplit,因爲在執行:(?從strplit)

請注意,這意味着,如果在 一開始比賽(非空)字符串,輸出的第一個元素是'「'',但是 如果在字符串末尾有一個匹配項,則輸出爲 ,與刪除的匹配項相同。

""是棘手的,因爲沒有方法來計算""在字符串中出現的次數。因此,將其視爲一種特殊情況似乎是合理的。

(從?str_split)如果「 「」」分裂成單個字符。

基於此,我建議你找到了一個錯誤,並應採取哈德利的建議,並報告它!

+3

我確實報告過,看到hadley是這個函數的作者。 ;) – joran