str_split和strsplit之间的行为不一致

时间:2011-09-09 20:48:46

标签: string r split

stringr 包中的str_split文档说明了pattern参数:

  

如果“”分成单个字符。

表明在这方面它与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 个答案:

答案 0 :(得分: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)如果'“”分成单个字符。

基于此,我建议您发现一个错误,并且应该接受hadley的建议并报告它!