Как проверить, содержит ли список определенный элемент в R - PullRequest
0 голосов
/ 31 октября 2018

У меня есть следующий список

A = list(c(1,2,3,4), c(5,6,7,8), c(4,6,2,3,1), c(6,2,1,7,12, 15, 16, 10))
A
[[1]]
[1] 1 2 3 4

[[2]]
[1] 5 6 7 8

[[3]]
[1] 4 6 2 3 1

[[4]]
[1]  6  2  1  7 12 15 16 10

Я хочу проверить, присутствует ли элемент 2 в каждом списке или нет. Если он существует, то мне нужно присвоить 1 этому соответствующему списку.

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 31 октября 2018

Вот простая версия с заменой!

lapply(A, function(x) ifelse(x==2,1,x))
0 голосов
/ 31 октября 2018

Вот вариант с tidyverse

library(tidyverse)
map_lgl(A, `%in%`, x = 2) %>% 
    as.integer
#[1] 1 0 1 1
0 голосов
/ 31 октября 2018

@ комментарий jasbner может быть уточнен до

1 * sapply(A, `%in%`, x = 2)
# [1] 1 0 1 1

В этом случае sapply возвращает логический вектор, а затем умножение на 1 приводит к TRUE к 1 и FALSE к 0. Кроме того, поскольку синтаксис равен x %in% table, мы можем избежать определения анонимного функцию function(x) 2 %in% x и вместо этого напишите как указано выше. И наконец, использование sapply вместо lapply возвращает вектор, а не список, что, похоже, является тем, что вам нужно.

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