【发布时间】:2021-09-28 03:18:16
【问题描述】:
在迁移到新 PC 并安装 RStudio 1.4.1717 后,我无法运行在 RStudio 1.3.959 下编写的代码。通过 base R (4.1.0) 运行代码时会出现同样的错误。使用基本 R 函数(grep、gregexpr,例如 gregexpr("[:alpha:]+", "1234a"))时,没有错误消息。
代码:
library(tidyverse)
data_files <- as.data.frame(list.files(data_folder))
data_files <- data_files %>%
mutate(temp = data_files[,1]) %>%
separate("temp",
c("temp", "Trash"),
sep = "\\.") %>%
select(-"Trash") %>%
separate("temp",
c("run", "Trash"),
sep = "[:alpha:]+",
remove = FALSE) %>%
select(-"Trash") %>%
separate("temp",
c("Trash", "letters"),
sep = "[:digit:]+") %>%
select(-"Trash") %>%
select("run", "letters")
我的 data_folder 包含具有名称模式的 csv 文件(date-increment-letter.csv,例如 21021202a.csv)
错误信息:
Error in gregexpr(pattern, x, perl = TRUE) :
invalid regular expression '[:alpha:]+'
In addition: Warning message:
In gregexpr(pattern, x, perl = TRUE) : PCRE pattern compilation error
'POSIX named classes are supported only within a class'
at '[:alpha:]+'
使用 dput 的可重现示例:
data_files <- as.data.frame(list.files(icpms_folder))
dput(head(data_files))
structure(list(list.files(icpms_folder) = c("21021202a.csv",
"21021202b.csv",
"21021202c.csv",
"21021203a.csv",
"21021203b.csv",
"21021203c.csv")),
row.names = c(NA, 6L), class = "data.frame")
请您指出我的全新安装中缺少什么?
提前谢谢你!
【问题讨论】:
-
请分享reproducible example,包括您使用的数据的一个小例子,最好使用
dput(head(YOURDATA))。编辑您的问题并将structure(...)-output 放在那里。 -
最后:尝试将
sep = "[:alpha:]+"替换为sep = "[[:alpha:]]+"。 -
@MartinGal,我相信这就是答案,请发布?我不知道为什么这以前会起作用(也许不是真的?)
-
@BenBolker 一些正则表达式专家应该发布这个并给出适当的解释,我实际上无法给出。
-
@MartinGal:这部分代码完成得非常快,没有经过深思熟虑。它工作了数百甚至数千次来获取文件列表,然后我将其传递给我的函数以实际读取数据。您将
sep = "[:alpha:]+"替换为sep = "[[:alpha:]]+"的解决方案非常有效,谢谢!我不知道为什么第一个变体适用于我之前的安装。