Я пытаюсь извлечь первое, второе, третье и т. Д. Слово из конца строки.stringr: word () может сделать это, указав строку и позицию, которую вы хотите (используя символ «минус», чтобы указать счетчик с конца строки).Я пытаюсь сделать это из потенциально длинного списка строк переменной длины (т.е. не знаю длину строки).Когда stringr::word
находит NA (строка, длина которой меньше длины, которую я хочу извлечь), она останавливает цикл while и отправляет сообщение об ошибке.Как я могу игнорировать это, чтобы перейти к следующей строке?
Вот пример: word("yum just made fresh", -5)
Вывод: [1] NA Предупреждающие сообщения: 1: In stri_sub (строка, от = начало, до = конец): аргумент не является атомным вектором;принуждение 2: в stri_sub (строка, от = начало, до = конец): аргумент не является атомным вектором;coercing
И по какой-то причине этот код:
word("ifkoalasshadarealityshow cake", -5)
даст это
output: [1] "ifkoalasshadarealityshow"
, даже если разделителем по умолчанию является пробел.
Вот мой цикл по мере увеличения счетчика:
Подмножество данных
x <- c("would be really into in", "demands the return of the", "", "tomato sugar free lemonada is", "thoughts of eating a piece of", "ifkolalashadarealityshow cake", "yum just made fresh", "ever had a")
Извлечение последнего слова (не проблема)
word(x, -1)
#[1] "in" "the" "" "is" "of" "cake" "fresh" "a"
Извлечение второго до последнего слова (предупреждение, но можно использовать вывод)
word(x, -2)
[1] "into" "of" NA "lemonada" "piece"
[6] "ifkolalashadarealityshow" "made" "had
"
Предупреждающие сообщения: 1: в stri_sub (строка, от = начало, до = конец):аргумент не является атомарным вектором; приведение 2: в stri_sub (строка, от = начало, до = конец): аргумент не атомарный вектор; приведение
аналогично третьему и четвертому последним словам(предупреждение, но пригодный для использования вывод)
word(x, -3)
[1] "really" "return" NA "free" "a" NA "just" "ever"
Предупреждающие сообщения: 1: в stri_sub (строка, от = начало, до = конец): аргумент не является атомарным вектором;(string, from = start, to = end): аргумент не является атомарным вектором; принудительное
word(x, -4)
[1] "be" "the" "" "sugar" "eating" "cake" "yum" NA
Предупреждающее сообщениеs: 1: в stri_sub (string, from = start, to = end): аргумент не является атомным вектором;принуждение 2: в stri_sub (строка, от = начало, до = конец): аргумент не является атомным вектором;принуждение
Пятый до последнего останавливает цикл (ошибка и останавливает цикл)
word(x, -5)
Ошибка в stri_sub (строка, от = начало, до = конец): (список) объект не может быть приведен к типу 'integer'. Дополнительно: Предупреждающее сообщение: In stri_sub (string, from = start, to = end): аргумент не является атомарным вектором;принуждение
На пятой итерации цикл останавливается.Я хотел бы обойти любые ошибки, чтобы продолжить обработку всех данных.
Спасибо за чтение и любые советы.