Выдать соответствующую строку в списке - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь проверить, содержит ли список конкретную строку, но у меня возникла проблема.

> k
[1] "Investment"
> t
[[1]]
[1] "Investment"     "Non-Investment"

> class(k)
[1] "character"
> class(t)
[1] "list"
> k %in% t
[1] FALSE

не должен ли приведенный выше код привести к ИСТИНА, а не ЛОЖЬ?

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Вам нужно unlist список:

X <- "investment"
Y <- list(c("non-investment", "investment"))

X %in% unlist(Y)

Обратите внимание, что я изменил его на X и Y: t - базовая функция, поэтому лучше не перезаписывать ее, потому что это может вызвать конфликты!

Следует учитывать списки с несколькими векторами и выяснить, хотите ли вы искать по списку векторов или по определенному вектору. Затем вы можете использовать unlist для одновременной проверки всех векторов и квадратные скобки для проверки конкретного вектора. Чтобы проиллюстрировать это, здесь есть подсписки в Y, а строка X находится во второй list, unlist говорит нам, что X находится в Y, а Y[[1]] возвращает FALSE, потому что %in% проверяет только первый подсписок:

X <- "alpha"
Y <- list(c("non-investment", "investment"), c("alpha", "beta"))

X %in% unlist(Y)
X %in% Y[[1]]

Обратите внимание, что, если вы указали Y как просто вектор - что, по сути, является тем же, что и в вашем примере, потому что нет других подсписков - тогда вы можете просто использовать:

X <- "investment"
Y <- c("non-investment", "investment")
X %in% Y
0 голосов
/ 01 мая 2018

Проблема с t в том, что это список длиной один вектор - попробуйте k %in% t[[1]]. Вы можете использовать unlist().

РЕДАКТИРОВАТЬ Извините, список векторов, а не списков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...