string - strsplit函数 - strsplit c



str_split和strsplit之间的行为不一致 (1)

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" "" 

这种差异是一个错误,功能,文档中的错误还是只是一个不同的'预期行为'的概念?


如果使用逗号作为分隔符,“预期”(您的里程可能会有所不同)结果更为明显:

# 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 ,因为在执行广告方面:

(from?strplit)请注意,这意味着如果在一个(非空)字符串的开头有一个匹配项,那么输出的第一个元素是'“'',但是如果在字符串,输出与删除的匹配相同。

""更棘手,因为没有办法计算出现在字符串中的次数"" 。 因此,将其视为一种特殊情况似乎是合理的。

(来自?str_split)如果“”“分裂成单个字符。

基于这个,我建议你已经发现了一个错误,应该采取哈德利的建议,并报告!





split