R-迭代以基于多个列表/向量的条件创建列表

R-迭代以基于多个列表/向量的条件创建列表,r,list,loops,R,List,Loops,我是一名初学者,在理解R中多个列表(或向量)的嵌套for循环的输入/输出时遇到困难。我确信其他地方已经回答了这个问题(如果是,请提供链接),但我在web上找不到好的答案,这将对我有帮助(我相信其他初学者/R用户也会有帮助)用简单的术语解释它 具体地说,我想知道如何正确地索引列表元素,以便在两个列表之间建立基于条件的关系,然后将满足此条件的一个列表的元素添加到新列表中 换句话说,我想迭代列表“a”中的每个元素,检查列表“b”中的任何/所有元素是否为==如果为TRUE,将列表“a”元素添加到新列表“

我是一名初学者,在理解R中多个列表(或向量)的嵌套for循环的输入/输出时遇到困难。我确信其他地方已经回答了这个问题(如果是,请提供链接),但我在web上找不到好的答案,这将对我有帮助(我相信其他初学者/R用户也会有帮助)用简单的术语解释它

具体地说,我想知道如何正确地索引列表元素,以便在两个列表之间建立基于条件的关系,然后将满足此条件的一个列表的元素添加到新列表中

换句话说,我想迭代列表“a”中的每个元素,检查列表“b”中的任何/所有元素是否为==如果为TRUE,将列表“a”元素添加到新列表“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
    }}

我在循环中索引元素的方式有什么问题?

您可以在%

a[a %in% b]
#[[1]]
#[1] 1
#
#[[2]]
#[1] 2
#
#[[3]]
#[1] 3
简言之

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
    }}}

a好的,但是如果我想编写一个比==元素更复杂的条件呢?希望有一个更通用的解决方案,可以替代其他条件函数。@Dorothy I只能根据您提供的示例数据和您显示的预期输出进行回答。但是,双for循环通常不是最好的选择。如果不是双for循环,我应该研究如何基于两个列表的比较来编写条件?您的最终目标是什么?我使用这种类型的比较批次有很多原因,我主要使用sp包处理空间数据。例如,我想看看空间点列表中的每个元素是否与空间多边形列表中的每个元素相交,如果为真,则将这些空间点添加到新列表中。
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
    }}}