Который с векторами иногда работает - R - PullRequest
0 голосов
/ 02 февраля 2019

Почему работает этот пример:

which(letters %in% c('j', 'e', 'f', 'f', 'r', 'e', 'y'))

Однако;это не так?

name <- c(strsplit("jeffrey", ""))
which(letters %in% name)

Разве это не одно и то же, поскольку в обоих случаях второй аргумент в какой функции является вектором?

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

Если вы запустите class(name), вы заметите, что это список.Для решения проблемы используйте unlist():

name <- unlist(strsplit("jeffrey", ""))
which(letters %in% name)

Best!

0 голосов
/ 02 февраля 2019

Проблема в том, что strsplit по-прежнему list из length 1 с первым элементом a vector

strsplit("jeffrey", "")
#[[1]]
#[1] "j" "e" "f" "f" "r" "e" "y"

Обтекание c не изменитСценарий по умолчанию recursive = FALSE.

c(strsplit("jeffrey", ""))
#[[1]]
#[1] "j" "e" "f" "f" "r" "e" "y"

Изменение recursive = TRUE позволит преобразовать list в vector

c(strsplit("jeffrey", ""), recursive = TRUE)
#[1] "j" "e" "f" "f" "r" "e" "y"

Если мы используем unlist (как в решении @ JohnyCrunch), он выводит список list, потому что по умолчанию recursive = TRUE и конвертируется в vector.В нашем случае другой подход заключается в извлечении элемента list с помощью [[ (поскольку это только list из length 1.

name <- strsplit("jeffrey", "")[[1]]
which(letters %in% name)
#[1]  5  6 10 18 25
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...