Mam ładne liście, który wygląda tak:Jak uzyskać dostęp do elementów na złożonej liście?
tmp = NULL
t = NULL
tmp$resultitem$count = "1057230"
tmp$resultitem$status = "Ok"
tmp$resultitem$menu = "PubMed"
tmp$resultitem$dbname = "pubmed"
t$resultitem$count = "305215"
t$resultitem$status = "Ok"
t$resultitem$menu = "PMC"
t$resultitem$dbname = "pmc"
tmp = c(tmp, t)
t = NULL
t$resultitem$count = "1"
t$resultitem$status = "Ok"
t$resultitem$menu = "Journals"
t$resultitem$dbname = "journals"
tmp = c(tmp, t)
która produkuje:
> str(tmp)
List of 3
$ resultitem:List of 4
..$ count : chr "1057230"
..$ status: chr "Ok"
..$ menu : chr "PubMed"
..$ dbname: chr "pubmed"
$ resultitem:List of 4
..$ count : chr "305215"
..$ status: chr "Ok"
..$ menu : chr "PMC"
..$ dbname: chr "pmc"
$ resultitem:List of 4
..$ count : chr "1"
..$ status: chr "Ok"
..$ menu : chr "Journals"
..$ dbname: chr "journals"
Teraz chcę przeszukać elementów każdego resultitem
. Chcę poznać numer dbname
dla każdej bazy danych, która ma mniej niż 10 count
(przykład). W tym przypadku jest to bardzo proste, ponieważ lista ta zawiera tylko 3 elementy, ale prawdziwa lista jest nieco dłuższa.
Można to zrobić po prostu za pomocą pętli for. Ale czy istnieje sposób, aby to zrobić z inną funkcją R (jak rapply)? Mój problem z tymi stosowanymi funkcjami polega na tym, że patrzą tylko na jeden element.
Jeśli zrobię grep, aby uzyskać wszystkie elementy dbname
, nie mogę uzyskać liczby poszczególnych elementów.
rapply(tmp, function(x) paste("Content: ", x))[grep("dbname", names(rapply(tmp, c)))]
Czy ktoś ma lepszy pomysł niż pętla for?
Przepraszam, ale dlaczego używasz tych niezręcznych struktur list, a nie ramki danych? –