R - итерация для создания списка из условия, основанного на нескольких списках / векторах - PullRequest
1 голос
/ 17 апреля 2019

Я начинающий программист, и у меня возникают проблемы с пониманием ввода / вывода вложенных циклов for для нескольких списков (или векторов) в R. Я уверен, что на этот вопрос ответили в другом месте (если да, предоставьте ссылку) , но я не могу найти хороший ответ в Интернете, и было бы полезно для меня (и я уверен, что другие начинающие программисты / R-пользователи) объяснить его в простых терминах.

В частности, я хотел бы знать, как правильно индексировать элементы списка, чтобы сделать условие основанным на некоторой взаимосвязи между обоими списками, а затем добавить элементы одного списка, соответствующие этому условию, в новый список.

Другими словами, я хотел бы пройтись по каждому элементу в списке 'a', проверить, равен ли он == для любого / всех элементов в списке 'b', и, если TRUE, добавить список ' 'элемент в новый список' c '.

Это упрощенный пример того, что я пробовал:

a <- as.list(c(1,2,3,11,12))
b <- as.list(c(1,2,3,4,5,6,7,8,9,10))

c <- list()
index <- 1
for (i in 1:length(a)){
  for (j in 1:length(b)){
    if (a[[i]] == b[[j]]) next 
      c[[index]] <- a[[i]]
      index <- index + 1
    }}

Результатом является список из 47 элементов. Результат, который я пытаюсь получить, следующий:

c
[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 3

Что не так с тем, как я проиндексировал элементы в цикле?

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Проще говоря,

if (condition) next 

означает, что если условие ИСТИНА, то ничего не делать и переходить к следующему циклу.

if (condition) {action}

означает, что если условие ИСТИНА, то выполнить действие.

измените его на

a <- as.list(c(1,2,3,11,12))
b <- as.list(c(1,2,3,4,5,6,7,8,9,10))

c <- list()
index <- 1
for (i in 1:length(a)){
  for (j in 1:length(b)){
    if (a[[i]] == b[[j]]) {
      c[[index]] <- a[[i]]
      index <- index + 1
    }}}

, тогда это будет работать

1 голос
/ 17 апреля 2019

Вместо двойного цикла for вы можете использовать %in%

a[a %in% b]
#[[1]]
#[1] 1
#
#[[2]]
#[1] 2
#
#[[3]]
#[1] 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...