gpt4 book ai didi

r - strsplit 返回不可见元素

转载 作者:行者123 更新时间:2023-12-01 14:50:23 26 4
gpt4 key购买 nike

我在 strsplit() 中发现了一个非常奇怪的行为。它类似于 this question ,但是我很想知道为什么它首先返回一个空元素。有人知道吗?

unlist(strsplit("88F5T7F4T13F", "\\d+"))  
[1] "" "F" "T" "F" "T" "F"

因为我使用该字符串来生成长逻辑向量 (88*FALSE 5*TRUE 7*FALSE 4*TRUE 13*FALSE) 我必须相信它...

回答 unlist(strsplit("88F5T7F4T13F", "\\d+"))[-1] 有效,但它是否健壮?

最佳答案

出现空元素是因为开头有数字。由于您在数字处拆分,因此第一次拆分恰好发生在字符串开头和第一个 F 之间,并且字符串开头处的空字符串被添加到结果列表中。

您可以使用自己的解决方案,因为它已经运行良好。如果您对替代解决方案感兴趣,请参阅下文:

unlist(strsplit(sub("^\\d+", "", "88F5T7F4T13F"), "\\d+"))

由于带有 ^\d+ 模式的 sub 删除了所有前导数字(^ 是字符串的开头和 \d+ 匹配 1 个或多个数字)。然而,它并不健壮,因为它使用了 2 个正则表达式。

library(stringr)
res = str_extract_all(s, "\\D+")

这只需要一个匹配正则表达式,\D+ - 1 个或多个非数字符号,以及一个外部库。

如果你想用 base R 做类似的事情,使用 regmatchesgregexpr:

regmatches(s, gregexpr("\\D+", s))

关于r - strsplit 返回不可见元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42476058/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com