gpt4 book ai didi

regex - R 正则表达式 : issues with character vectors containing NAs

转载 作者:行者123 更新时间:2023-12-04 15:33:49 24 4
gpt4 key购买 nike

我试图使用 gsub() 将向量元素中的所有多个(2 个或更多)空白字符折叠为一个。 ,例如:

x1 <- c("  abc", "a b c    ", "a  b c")
gsub("\\s{2,}", " ", x1)
[1] " abc" "a b c " "a b c"

但是只要向量包含 NA替换失败:
x2 <- c(NA, "  abc", "a b c    ", "a  b c")
gsub("\\s{2,}", " ", x2)
[1] NA " " " " " "

但是,如果使用类似 Perl 的正则表达式,它就可以正常工作:
gsub("\\s{2,}", " ", x2, perl = TRUE)
[1] NA " abc" "a b c " "a b c"

有没有人有关于为什么 R 自己的正则表达式会以这种方式表现的建议?如果有帮助,我将在 Linux x86-64 上使用 R 3.1.1。

最佳答案

我还没有研究过源代码,但如果您使用 useBytes=TRUE,它也可以工作。参数(没有 perl=TRUE 参数)。来自帮助:“如果 useBytesTRUE 匹配是逐字节而不是逐字符完成的。”这可能是它在 gsub 中失败的部分原因.

然而,regexpr , regexecgregexpr每个人都找到了所有正确的位置(我用 \\s 替换了 [[:space:]]: 以提高可读性,并且只使用了来自 regexpr 的输出:

regexpr("[[:space:]]{2,}", x2)

## [1] NA 1 1 1
## attr(,"match.length")
## [1] NA 5 9 6

所以,正则表达式本身很好。

更新:快速浏览 do_gsub在 R 3.1.1 中 grep.c没有产生太多洞察力(这是 if/else 语句的扭曲迷宫:-),但我几乎想将其称为错误。

关于regex - R 正则表达式 : issues with character vectors containing NAs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26174360/

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