[英]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.