給定一個R列表,我希望找到給定列表條目的索引。例如,對於輸入「36」,我希望我的輸出爲「2」。另外,我怎麼能使用lapply並行地執行這樣的查詢?搜索R中的列表條目的索引
列表
$ 1
[1] 「7」 「12」 「26」 「29」
$ 2
[1] 「11」 「36」
$ 3
[1]「20」「49」
$ 4
[1]「39」「41」
給定一個R列表,我希望找到給定列表條目的索引。例如,對於輸入「36」,我希望我的輸出爲「2」。另外,我怎麼能使用lapply並行地執行這樣的查詢?搜索R中的列表條目的索引
列表
$ 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
非常感謝! R在開始時可能會讓人頭疼。 – SAT 2012-04-02 18:08:54
@Josh:你的榜樣不應該返回'[1] 3 4'嗎? – 2012-04-02 18:27:24
@CarlWitthoft - 是的,謝謝。 (我很早就做了一個快速代碼編輯,但顯然忽略了改變結果位。)現在修復了它。另外,請隨意編輯這樣的東西(至少在我的任何帖子中)! – 2012-04-02 18:33:11
你可以先打開你的名單分成映射值,其對應的索引列表中的一個data.frame:
ll <- 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」)))''讓你關閉。 – 2012-04-02 18:01:04
你的例子是不明確的,因爲「36」是第二個列表元素和第二個列表元素中的第二個元素。 – 2012-04-02 18:48:40