Я гораздо лучше знаком с векторами, data.frames и тому подобным, но согласен, что использовать список удобно, когда функция имеет несколько выходов.
Функция из пакета, который я использую, получает именованный список изtibbles (не очень знакомы с tibbles), ни список.
List of 68
$ 292684 :Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 5 obs. of 3 variables:
..$ name: chr [1:5] "Animalia" "Arthropoda" "Chelicerata" "Arachnida" ...
..$ rank: chr [1:5] "Kingdom" "Phylum" "Subphylum" "Class" ...
..$ id : int [1:5] 2 1065 1274 1300 292684
$ 126752 :Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 10 obs. of 3 variables:
..$ name: chr [1:10] "Animalia" "Chordata" "Vertebrata" "Gnathostomata" ...
..$ rank: chr [1:10] "Kingdom" "Phylum" "Subphylum" "Superclass" ...
..$ id : int [1:10] 2 1821 146419 1828 10194 11014 151729 125516 125909 126752
Мой вопрос как эффективно перемещаться по этому списку, подмножеству в соответствии с логическим условием, возможно, заменить некоторые значения при сохранении формата списка?
Я пробовал unlist () / relist (), но он не сохраняет структуру.Я пробовал вложенный sapply sapply (sapply (mylist, "[", 2), function (x) и т. Д.), А затем применил мое условие к выходным данным, чтобы определить позицию и использовать eval (parse (paste ...) для достиженияправильный уровень в списке, но довольно сложно ...
aa <- sapply(sapply(list.classif, "[", 2), length)
who.max <- which(aa==max(aa))
pos.list <- which(aa==max(aa))
index <- names(who.max)
best.classif <- eval(parse(text=paste("list.classif[pos.list]$`",index,
"`$rank", sep="") ))
Если мне удалось таким образом подгруппировать данные ... Это кажется слишком сложным, и я уверен, что есть лучшее решение?
Кроме того, что если я захочу заменить данные в этом конкретном месте? Вы не можете сделать классический объект, не так ли?
object[index, index] <- replacebythat
Возможнооперации могут быть:
- , чтобы изменить "Chordata" на ... "Что угодно",
- изменить "Класс" на ... "Что-то"
- Определитьу каких организмов есть "Subphylum" "Crustacea" (т. е. $ name == Crustacea)
- В зависимости от выбора выше измените информацию.
ОБРАЗЕЦ ДАННЫХс dput ()
structure(list(`292684` = structure(list(name = c("Animalia",
"Arthropoda", "Chelicerata", "Arachnida", "Acari"), rank = c("Kingdom",
"Phylum", "Subphylum", "Class", "Subclass"), id = c(2L, 1065L,
1274L, 1300L, 292684L)), .Names = c("name", "rank", "id"), row.names = c(NA,
-5L), class = c("tbl_df", "tbl", "data.frame")), `126752` = structure(list(
name = c("Animalia", "Chordata", "Vertebrata", "Gnathostomata",
"Pisces", "Actinopterygii", "Perciformes", "Trachinoidei",
"Ammodytidae", "Ammodytes", "Ammodytes tobianus"), rank = c("Kingdom",
"Phylum", "Subphylum", "Superclass", "Superclass", "Class",
"Order", "Suborder", "Family", "Genus", "Species"), id = c(2L,
1821L, 146419L, 1828L, 11676L, 10194L, 11014L, 151729L, 125516L,
125909L, 126752L)), .Names = c("name", "rank", "id"), row.names = c(NA,
-11L), class = c("tbl_df", "tbl", "data.frame")), `421139` = structure(list(
name = c("Animalia", "Arthropoda", "Crustacea", "Multicrustacea",
"Hexanauplia", "Thecostraca", "Cirripedia", "Thoracica",
"Sessilia", "Balanomorpha", "Balanoidea", "Balanidae", "Amphibalaninae",
"Amphibalanus", "Amphibalanus improvisus"), rank = c("Kingdom",
"Phylum", "Subphylum", "Superclass", "Class", "Subclass",
"Infraclass", "Superorder", "Order", "Suborder", "Superfamily",
"Family", "Subfamily", "Genus", "Species"), id = c(2L, 1065L,
1066L, 845959L, 889925L, 22388L, 1082L, 1107L, 106033L, 106039L,
106041L, 106057L, 394026L, 415046L, 421139L)), .Names = c("name",
"rank", "id"), row.names = c(NA, -15L), class = c("tbl_df", "tbl",
"data.frame")), `1135` = structure(list(name = c("Animalia",
"Arthropoda", "Crustacea", "Multicrustacea", "Malacostraca",
"Eumalacostraca", "Peracarida", "Amphipoda"), rank = c("Kingdom",
"Phylum", "Subphylum", "Superclass", "Class", "Subclass", "Superorder",
"Order"), id = c(2L, 1065L, 1066L, 845959L, 1071L, 1086L, 1090L,
1135L)), .Names = c("name", "rank", "id"), row.names = c(NA,
-8L), class = c("tbl_df", "tbl", "data.frame")), `103068` = structure(list(
name = c("Animalia", "Arthropoda", "Crustacea", "Multicrustacea",
"Malacostraca", "Eumalacostraca", "Peracarida", "Amphipoda",
"Senticaudata", "Gammarida", "Gammaridira", "Gammaroidea",
"Bathyporeiidae", "Bathyporeia", "Bathyporeia pilosa"), rank = c("Kingdom",
"Phylum", "Subphylum", "Superclass", "Class", "Subclass",
"Superorder", "Order", "Suborder", "Infraorder", "Parvorder",
"Superfamily", "Family", "Genus", "Species"), id = c(2L,
1065L, 1066L, 845959L, 1071L, 1086L, 1090L, 1135L, 719424L,
236816L, 720166L, 720708L, 533675L, 101742L, 103068L)), .Names = c("name",
"rank", "id"), row.names = c(NA, -15L), class = c("tbl_df", "tbl",
"data.frame"))), .Names = c("292684", "126752", "421139", "1135",
"103068"))