Sha*_*and 3 loops r function list
我有一个要过滤的列表。
[[100]][[1]]$total
[1] 7
[[100]][[2]]
[1] 7
[[100]][[3]]
[1] 25082.66
Run Code Online (Sandbox Code Playgroud)
这是我从脚本中得到的输出,我试图过滤此列表中总计 = 7 的所有元素。我总共有 100 个元素。
我的清单被标记为“排序”
A<-(list.filter(sorts,total>6))
Run Code Online (Sandbox Code Playgroud)
我想要一个仅包含总计为 7 的元素的列表
我们可以从每个列表中提取"total"元素并仅选择其中包含 7 的元素。
lst[sapply(lst, "[[", "total") == 7]
#[[1]]
#[[1]]$total
#[1] 7
#[[1]][[2]]
#[1] 2
#[[1]][[3]]
#[1] 2
#[[2]]
#[[2]]$total
#[1] 7
#[[2]][[2]]
#[1] 2
#[[2]][[3]]
#[1] 2
Run Code Online (Sandbox Code Playgroud)
或者我们也可以使用Filter
Filter(function(x) x[["total"]] == 7, lst)
Run Code Online (Sandbox Code Playgroud)
使用purrr我们可以使用keep/discard
library(purrr)
keep(lst, ~.[["total"]] == 7)
discard(lst, ~.[["total"]] != 7)
Run Code Online (Sandbox Code Playgroud)
或者map_lgl
lst[map_lgl(lst, ~.[["total"]] == 7)]
Run Code Online (Sandbox Code Playgroud)
数据
假设您的列表被调用lst并且如下所示
lst <- list(list(total = 100, 1, 2), list(total = 7, 2, 2),
list(total = 7, 2, 2), list(total = 71, 2, 2))
Run Code Online (Sandbox Code Playgroud)
我们可以使用pluck和map
keep(lst, map(lst, pluck, "total") == 7)
#[[1]]
#[[1]]$total
#[1] 7
#[[1]][[2]]
#[1] 2
#[[1]][[3]]
#[1] 2
#[[2]]
#[[2]]$total
#[1] 7
#[[2]][[2]]
#[1] 2
#[[2]][[3]]
#[1] 2
Run Code Online (Sandbox Code Playgroud)
lst <- list(list(total = 100, 1, 2), list(total = 7, 2, 2),
list(total = 7, 2, 2), list(total = 71, 2, 2))
Run Code Online (Sandbox Code Playgroud)