2011-09-09 204 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