给定一个 R 列表,我想找到给定列表条目的索引。例如,对于条目"36"
,我的输出应该是"2"
。此外,如何使用 lapply 并行执行这样的查询?
> list
$`1`
[1] "7" "12" "26" "29"
$`2`
[1] "11" "36"
$`3`
[1] "20" "49"
$`4`
[1] "39" "41"
这是一个一行代码,它可以允许(很可能)列表中的多个元素包含您正在搜索的字符串:
## Some example data
ll <- list(1:4, 5:6, 7:12, 1:12)
ll <- lapply(ll, as.character)
which(sapply(ll, FUN=function(X) "12" %in% X))
# [1] 3 4
[1] 3 4
,对吗? - Carl Witthoftwhich(sapply(ll, FUN=function(X) 12 %in% X))
就可以了。 - mikeyll <- list(c("7", "12", "26", "29"),
c("11", "36"),
c("20", "49"),
c("39", "41"))
df <- data.frame(value = unlist(ll),
index = rep(seq_along(ll), lapply(ll, length)))
df
# value index
# 1 7 1
# 2 12 1
# 3 26 1
# 4 29 1
# 5 11 2
# 6 36 2
# 7 20 3
# 8 49 3
# 9 39 4
# 10 41 4
然后,编写一个使用match
函数查找给定值第一次出现的索引的函数:
find.idx <- function(val)df$index[match(val, df$value)]
您可以在单个值上调用此函数,也可以一次在多个值上进行操作,因为match
是矢量化的:
find.idx("36")
# [1] 2
find.idx(c("36", "41", "99"))
# [1] 2 4 NA
当然,您也可以通过lapply
运行它,特别是如果您计划并行运行:
lapply(c("36", "41", "99"), find.idx)
# [[1]]
# [1] 2
#
# [[2]]
# [1] 4
#
# [[3]]
# [1] NA
如果想要并行运行最后一部分,有很多选择。我建议你通过搜索 http://cran.r-project.org/web/views/HighPerformanceComputing.html来权衡不同的选择。
lapply(component_list, function(x) any(match(x, "36")))
这样的代码可以让你接近目标。 - Tyler Rinker