Si potrebbe innanzitutto attivare la vostra lista in un data.frame che mappa i valori al loro indice corrispondente nella lista:
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
Poi, scrivere una funzione utilizzando match
per trovare l'indice del primo verificarsi rimento di un dato valore:
find.idx <- function(val)df$index[match(val, df$value)]
È possibile chiamare questa funzione su un singolo valore, o molti in un momento dato match
è vettorializzare:
find.idx("36")
# [1] 2
find.idx(c("36", "41", "99"))
# [1] 2 4 NA
Naturalmente, è anche possibile eseguirlo tramite lapply
, soprattutto se si prevede di eseguire in parallelo:
lapply(c("36", "41", "99"), find.idx)
# [[1]]
# [1] 2
#
# [[2]]
# [1] 4
#
# [[3]]
# [1] NA
per l'esecuzione di questo ultimo bit in parallelo, ci sono molte, molte opzioni. Ti consiglio di valutare le opzioni cercando attraverso http://cran.r-project.org/web/views/HighPerformanceComputing.html.
Forse qualcosa come 'lapply (component_list, function (x) any (match (x," 36 "))) ti avvicina. –
L'esempio è ambiguo perché "36" è il secondo elemento dell'elenco e il secondo elemento nel secondo elemento dell'elenco. –