Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在列表中遍历列表的程序_R - Fatal编程技术网

R 在列表中遍历列表的程序

R 在列表中遍历列表的程序,r,R,我有一个包含许多包含字符向量的列表。列表的排列方式始终是,第一个列表包含一个包含单个元素的向量,第二个列表包含一个包含两个元素的向量,第三个列表包含一个或多个包含三个元素的向量 fruits <- list( list(c("orange")), list(c("pear", "orange")), list(c("orange", "pear", "grape&quo

我有一个包含许多包含字符向量的列表。列表的排列方式始终是,第一个列表包含一个包含单个元素的向量,第二个列表包含一个包含两个元素的向量,第三个列表包含一个或多个包含三个元素的向量

fruits <- list(
  list(c("orange")),
  list(c("pear", "orange")),
  list(c("orange", "pear", "grape"),
       c("orange", "lemon", "pear"))
)

fruits也许你可以试试下面的代码

new_fruits <- s <- c()
for (k in seq_along(fruits)) {
  new_fruits[[k]] <- lapply(fruits[[k]],function(x) x[!x%in%s])
  s <- union(s,unlist(fruits[[k]]))
}

这里有一个想法,我们取消列表,转换为字符串并重新拆分,以区分同一元素的不同向量。然后我们再取消一次列表,得到唯一的值,即

as.list(unique(unlist(strsplit(unlist(lapply(fruits, function(i) sapply(i, toString))), ', '))))

#[[1]]
#[1] "orange"

#[[2]]
#[1] "pear"

#[[3]]
#[1] "grape"

#[[4]]
#[1] "lemon"

另外两个紧凑型选项:

>mapply(水果,附加(列表(“”),水果[-length(水果)],after=length(水果)),FUN=function(x,y)sapply(x,function(item)list(setdiff(item,y[[1]]))
[[1]]
[[1]][[1]]
[1] “橙色”
[[2]]
[[2]][[1]]
[1] “梨”
[[3]]
[[3]][[1]]
[1] “葡萄”
[[3]][[2]]
[1] “柠檬”
或者也

>附加(水果[[1]],映射(水果[-1],水果[-length(水果)],乐趣=功能(x,y)sapply(x,功能(项目)列表(setdiff(项目,y[[1]])),之后=长度(水果))
[[1]]
[1] “橙色”
[[2]]
[[2]][[1]]
[1] “梨”
[[3]]
[[3]][[1]]
[1] “葡萄”
[[3]][[2]]
[1] “柠檬”

这很好,对于我遇到的第一个列表缺失的少数情况也很有效。干杯,谢谢。我得花点时间才能弄清楚这里到底发生了什么!这个解释应该给你一个开始。将其拆开并逐件运行(当然是从内到外)
> new_fruits
[[1]]
[[1]][[1]]
[1] "orange"


[[2]]
[[2]][[1]]
[1] "pear"


[[3]]
[[3]][[1]]
[1] "grape"

[[3]][[2]]
[1] "lemon"
as.list(unique(unlist(strsplit(unlist(lapply(fruits, function(i) sapply(i, toString))), ', '))))

#[[1]]
#[1] "orange"

#[[2]]
#[1] "pear"

#[[3]]
#[1] "grape"

#[[4]]
#[1] "lemon"