繁体   English   中英

R-根据多个列表/向量迭代从条件创建列表

[英]R - iterate to create list from condition based on multiple lists/vectors

我是一名初学者,在理解R中多个列表(或向量)的嵌套for循环的输入/输出时遇到麻烦。我敢肯定这已在其他地方得到了解答(如果是,请提供链接),但是我无法在网上找到一个好的答案,这对我(而且我相信其他初学者/ 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
    }}

结果是一个包含47个元素的列表。 我正在尝试的结果如下:

c
[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 3

我在循环中如何索引元素有什么问题?

可以使用%in%代替double for循环

a[a %in% b]
#[[1]]
#[1] 1
#
#[[2]]
#[1] 2
#
#[[3]]
#[1] 3

简单的说,

if (condition) next 

表示如果condition为TRUE,则什么也不做,继续进行下一个循环。

if (condition) {action}

表示如果条件为TRUE,则执行操作。

更改为

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

然后它会工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM