str_split和strsplit之间的行为不一致

jor*_*ran 7 string split r

对于文档str_splitstringr包指出,该模式参数:

如果""分成单个字符.

这表明它strsplit在这方面的表现与此相同.然而,

library(stringr)
str_split("abcab","")
[[1]]
[1] ""  "a" "b" "c" "a" "b"
Run Code Online (Sandbox Code Playgroud)

带有前导空字符串.与之相比,

strsplit("abcab","")
[[1]]
[1] "a" "b" "c" "a" "b"
Run Code Online (Sandbox Code Playgroud)

在拆分非空字符串时,前导空字符串似乎是正常行为,

strsplit("abcab","ab")
[[1]]
[1] ""  "c"
Run Code Online (Sandbox Code Playgroud)

但即使这样,也会str_split生成一个'额外'尾随空字符串:

str_split("abcab","ab")
[[1]]
[1] ""  "c" "" 
Run Code Online (Sandbox Code Playgroud)

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

pet*_*ete 4

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

\n\n
# expect "" "2" "3" "4" ""\n\nstrsplit(",2,3,4,", ",")\n# [[1]]\n# [1] ""  "2" "3" "4"\n\nstr_split(",2,3,4,", ",")\n# [[1]]\n# [1] ""  "2" "3" "4" "" \n
Run Code Online (Sandbox Code Playgroud)\n\n

如果我有n逗号,那么我希望(n+1)返回元素。所以我更喜欢 的结果str_split。但是,我不一定会将此称为 中的错误strsplit,因为 中 的执行情况如广告所示:

\n\n
\n

(来自 ?strplit)请注意,这意味着如果\na(非空)字符串的开头有匹配项,则输出的第一个元素是 \xe2\x80\x98""\xe2\x80\x99,但如果字符串末尾有匹配项,则输出与删除匹配项时的输出相同。

\n
\n\n

""""比较棘手,因为无法计算字符串中出现的次数。因此,将其视为特殊情况似乎是合理的。

\n\n
\n

(来自 ?str_split)如果 \xe2\x80\x98""\xe2\x80\x99 分割成单个字符。

\n
\n\n

基于此,我建议您发现了一个错误,应该采纳哈德利的建议并报告它!

\n

  • 我确实报告了它,因为哈德利是这个函数的作者。;) (4认同)