Ошибка: «аргумент не является атомом c вектором; принуждение [1] ЛОЖЬ» - PullRequest
1 голос
/ 05 апреля 2020

Я новичок в 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-ю до последней строки «Произошла ошибка!»:

Silk.Road.Forums
<fctr>
*
Welcome, Guest. Please login or register.
[ ] [ ] [Forever] [Login]
Login with username, password and session length
[ ] [Search]
â\200¢ Home
â\200¢ Search
â\200¢ Login
â\200¢ Register
â\200¢ Silk Road Forums
An Error Has Occurred!
The user whose profile you are trying to view does not exist.
Back
â\200¢ 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, поэтому я немного растерялся.


Это все, что у меня есть, и заранее благодарю всех за желание помочь!

1 Ответ

1 голос
/ 05 апреля 2020

Я думаю, что здесь происходит то, что read.delim читает в вашем текстовом файле как фрейм данных, а не как вектор, который требуется для str_detect.

Для быстрой работы вы можете попробовать.

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

Это работает, потому что сейчас data1 - это фрейм данных с 1 столбцом. data2[,1] возвращает все строки для первого (и единственного) столбца этого фрейма данных и возвращает его как вектор.

Однако! Проблема здесь в том, что вы используете read.delim, который предназначен для текстовых файлов с разделителями (то есть, как CSV-файл с разделителем, таким как ','), а ваши данные - нет. Гораздо лучше было бы использовать функцию readlines, которая вернет вам символьный вектор.

# 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!")
...