Error: "argument is not an atomic vector; coercing[1] FALSE"

Error: "argument is not an atomic vector; coercing[1] FALSE"

我是 R 的新手,在 (1) 概括之前针对我的情况的堆栈溢出答案,以及 (2) 理解 R 文档时遇到了问题。所以我求助于这个社区,希望有人能引导我完成。


我有这段代码,其中 data1 是一个文本文件:

data1 <- read.delim(file.choose())
pattern <- c("An Error Has Occurred!")
str_detect(data1, regex(pattern, ignore_case = FALSE))

我看到的错误信息是:

argument is not an atomic vector; coercing[1] FALSE

当我使用is.vector()确认数据类型时,看起来应该没问题:

is.vector(pattern)
#this returns [1] TRUE as the output

我用于 str_detect 函数的参考是 https://www.rdocumentation.org/packages/stringr/versions/1.4.0/topics/str_detect


编辑 1: 这是 data1 的输出 - 我试图匹配第 4 行到最后一行 "An Error Has Occurred!":

Silk.Road.Forums
<fctr>
*
Welcome, Guest. Please login or register.
[ ] [ ] [Forever] [Login]
Login with username, password and session length
[ ] [Search]
â0¢ Home
â0¢ Search
â0¢ Login
â0¢ Register
â0¢ Silk Road Forums
An Error Has Occurred!
The user whose profile you are trying to view does not exist.
Back
â0¢ SMF | SMF © 2013, Simple Machines

编辑 2: 经过一些初步测试后,问题似乎出在我的打开方式 data1 上,不一定 str_detect()

当我刚创建一个向量时,它起作用了:

dataVector <- c("An Error Has Occurred!", "another one")
pattern <- c("An Error Has Occurred!")
str_detect(dataVector, pattern) # returns [1] TRUE FALSE

但是当我尝试在文件上使用该函数时,它没有

data1 <- read.delim(file.choose())
pattern <- c("An Error Has Occurred!")
str_detect(data1, pattern) # returns the atomic vector error message`

问题: 所以我确信问题是 (1) 我使用了错误的函数或 (2) 我加载的文件错误这种文件类型。我以前从未在 R 中使用过文本文件,所以我有点迷路了。


这就是我的全部,提前感谢任何愿意提供帮助的人!

我认为这里发生的事情是 read.delim 正在将您的文本文件作为数据框读取,而不是 str_detect 需要的向量。

要快速解决问题,您可以尝试一下。

str_detect(data1[,1], "An Error Has Occurred!")

之所以可行,是因为现在 data1 是一个 1 列数据框。 data2[,1] return 该数据框的第一列(也是唯一一列)的所有行,return 将其作为向量。

但是!这里的问题是您使用的是 read.delim 用于分隔的文本文件(即像 csv 文件一样有分隔符,例如','),而您的数据不是。更好的方法是使用函数 readlines,它将 return 你一个字符向量。

# open a connection to your file
con <- file('path/to/file.txt',open="r")
# read file contents
data1 <- readLines(con)
# close the connection
close(con)

那么 str_detect 就可以了。

str_detect(data1, "An Error Has Occurred!")

只需 as.data.frame() 您的数据,str_replace() 工作正常!