Extrahieren Sie Elemente aus einer Liste mit get() und paste() in R
Habe ich eine Liste von sechs indviduals, jede enthält 25 Nummern. Die Daten werden hier
durch dput()
data <- structure(list(AAA = structure(c(0.539032790443548, 0.536888048404759,
0.519687575144773, 0.540104624777809, 0.57386075783306, 0.539805870321112,
0.538733934351732, 0.530445942604962, 0.521841030809798, 0.541176088266961,
0.56539960323135, 0.551570726188792, 0.557196928234619, 0.517533387708244,
0.567518667655521, 0.532295137298835, 0.542247171136739, 0.541948628127994,
0.533668399132029, 0.546527501435108, 0.529071565146478, 0.575969506937413,
0.556132191844378, 0.572805370086458, 0.525845566212544), .Dim = c(25L,
1L)), BBB = structure(c(0.499216657615325, 0.537490952761078,
0.43385212802169, 0.582152772934407, 0.495717756862187, 0.535025311378272,
0.43385212802169, 0.607585618769066, 0.51961831826224, 0.477799201847025,
0.593737672553431, 0.448083953208316, 0.564607973025657, 0.381933810565836,
0.582152772934407, 0.555267755972877, 0.454004260019714, 0.596126995098342,
0.469366643373233, 0.489741406245514, 0.39565274890788, 0.523110920308712,
0.517142992101799, 0.39565274890788, 0.578744364954426), .Dim = c(25L,
1L)), CCC = structure(c(0.517638997604126, 0.514052704141984,
0.485341292016175, 0.524805767901646, 0.435170284293271, 0.485341292016175,
0.481755279544946, 0.506876143514677, 0.421108263752241, 0.488653944275884,
0.383154152708813, 0.578031931495085, 0.477896667937187, 0.539105776278097,
0.520948955546837, 0.474589257707777, 0.499421739935859, 0.396817548905349,
0.445786979965935, 0.492242533218636, 0.389964263092625, 0.56042847462084,
0.503286615216397, 0.431644065154171, 0.438973968229145), .Dim = c(25L,
1L)), DDD = structure(c(0.484888569519603, 0.442688918297825,
0.518331393929951, 0.512548610084284, 0.482961110202505, 0.457970991381686,
0.573751865786352, 0.438884146815107, 0.461805048643506, 0.533723983278093,
0.545228033583635, 0.473332558849223, 0.558587821448958, 0.549052625000964,
0.442688918297825, 0.452229366063252, 0.543313706170222, 0.479107769328041,
0.5680800051331, 0.512548610084284, 0.433190571208039, 0.562390236072908,
0.482961110202505, 0.549052625000964, 0.566185334180834), .Dim = c(25L,
1L)), EEE = structure(c(0.527642738158034, 0.655613752398633,
0.659899891320058, 0.577684574059289, 0.468878305768695, 0.417245905647398,
0.51814290965504, 0.605280452996461, 0.398852141429807, 0.421882717287325,
0.483124544962739, 0.522894894437057, 0.527642738158034, 0.544877520452231,
0.522894894437057, 0.398852141429807, 0.475330590515985, 0.521185738519326,
0.540151934786979, 0.440560204368187, 0.651302139891474, 0.435872884121988,
0.426533342315385, 0.642604752301341, 0.525935170556392), .Dim = c(25L,
1L)), FFF = structure(c(0.535178732002055, 0.590708080450234,
0.397361678539085, 0.415528903431535, 0.553856005124287, 0.544533027664449,
0.538299910477083, 0.394359689796758, 0.538299910477083, 0.510130509315003,
0.590708080450234, 0.532054795832899, 0.560050751685107, 0.52892834473642,
0.468102832205161, 0.530783113472337, 0.437014509571061, 0.566226849219331,
0.502578884653375, 0.587669810559495, 0.409444994567033, 0.458739104066398,
0.474358234263268, 0.599780569192313, 0.590708080450234), .Dim = c(25L,
1L))), .Names = c("AAA", "BBB", "CCC", "DDD", "EEE", "FFF"))
Den str()
von Daten wie folgt Aussehen.
> str(data)
List of 6
$ AAA: num [1:25, 1] 0.539 0.537 0.52 0.54 0.574 ...
$ BBB: num [1:25, 1] 0.499 0.537 0.434 0.582 0.496 ...
$ CCC: num [1:25, 1] 0.518 0.514 0.485 0.525 0.435 ...
$ DDD: num [1:25, 1] 0.485 0.443 0.518 0.513 0.483 ...
$ EEE: num [1:25, 1] 0.528 0.656 0.66 0.578 0.469 ...
$ FFF: num [1:25, 1] 0.535 0.591 0.397 0.416 0.554 ...
Ich versuche, mit get()
und paste()
zurück die zahlen der einzelnen innerhalb einer for () - Schleife.
Kann ich dies direkt mit zu code unten außerhalb der Schleife.
data$AAA
oder
> head(data$AAA)
[,1]
[1,] 0.5390328
[2,] 0.5368880
[3,] 0.5196876
[4,] 0.5401046
[5,] 0.5738608
[6,] 0.5398059
Muss ich jedoch nennen diese zahlen in einer Schleife. Habe ich zunächst ein Name-Objekt als
Name <- c("AAA","BBB", "CCC", "DDD", "EEE", "FFF")
Und können ordnungsgemäß zurückgeben, die den Namen einer Einzelperson.
paste("data$", Name[1], sep="")
> paste("data$", Name[1], sep="")
[1] "data$AAA"
Jedoch, wenn der gleiche code ist verpackt in get() die Elemente werden nicht zurückgegeben
und eine Fehlermeldung angezeigt, wie unten dargestellt.
get(paste("data$", Name[1], sep=""))
> get(paste("data$", Name[1], sep=""))
Error in get(paste("data$", Name[1], sep = "")) :
object 'data$AAA' not found
Während data$AAA
ist ein Element in einer Liste, sondern als ein Objekt, deshalb ist es ein Wert zurückgegeben, wenn die Ausführung außerhalb der get()
und paste()
aber nicht gefunden beim laufen mit get()
und paste()
?
Gibt es eine bessere Möglichkeit zum extrahieren von Elementen aus einer Liste?
Innerhalb einer for () - Schleife muss ich extrahieren Sie die zahlen für jedes einzelne AAA:FFF und resample Sie für eine boot-strap.
Vielen Dank für alle Vorschläge.
- Verwenden Sie nicht
$
für die Programmierung. (Dies ist ein Vielfaches duplizieren Frage.) die Antwort ist die Verwendung[[
. Und verwenden Sie nicht entweder von Ihnen inget
. Sprache Objekte, die nicht den Charakter von Vektoren. lapply( data , sample , replace = TRUE )
wird jede erneut der Daten des einzelnen zu ersetzen.- Vielen Dank für die Kommentare und Allgemeine Beratung. Ich hatte auch [[]] statt $ und hatte das gleiche Ergebnis. Mein problem war entweder [[ oder $ innerhalb der get () - Funktion.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Funktion
get
können verwendet werden, um Objekte zurückgeben. In deinem Falldata
ist ein Objekt, aberdata$AAA
nicht wieder ein Objekt, sondern ein element in der Liste.Zugriff auf Listenelemente in einer Schleife können Sie entweder Ihren Namen vector
Name
oder einfach die ganzen zahlen zusammen mit der Funktion[[
.Darüber hinaus müssen Sie nicht den Namen der Liste, die Elemente, wenn Sie verwenden möchten, alle Listenelemente in einer Schleife. Diese kann getan werden, mit, z.B.,
lapply
.Den oben genannten Befehl ist ein einfacher Weg, um schieben Sie die Reihenfolge der Werte in der Liste Elemente.
data$AAA
ist nicht ein Objekt, sondern eher eine ungewichtete function-call. Wenn es jemals ausgewertet, es zurückgeben könnte ein element in der Liste.