Ich habe Probleme beim Aufrufen eines Objekts aus einer Liste von einer erstellten Variablen innerhalb meiner for-Schleife.Objekte aus der Liste aufrufen
for (i in 1:10)
{
#create variables and run through function
varName<-paste("var",i,sep="")
assign(varName, rnmf(data, k=i, showprogress=FALSE))
#create new variable using object 3 from varName output
varNF<-paste("varNF",i,sep="")
assign(varNF, (data-varName[[3]])^2)
}
Mein Problem ist mit dem zweiten Teil meiner for-Schleife. Ich versuche, das dritte Objekt aus der Ausgabe meiner ersten erstellten Variable in der Berechnung meiner zweiten Variablen zu verwenden. Wenn ich varName[[3]]
verwende, bekomme ich "subscript out of bounds"
, und wenn ich varName$fit
verwende, bekomme ich "$ operator is invalid for atomic vectors"
.
Es sieht aus wie varName in meinem zweiten Teil ruft nicht die inkrementierende varName (var1, var2, var3, etc ...), die ich erstelle, aber es ruft die tatsächliche Variable varName. Um zu versuchen, um das zu bekommen, habe ich versuchte stattdessen
assign(varNF, (data-get(paste("var",i,"[[3]]",sep="")))^2)
Was mir den Fehler gab "object 'var1[[3]]' not found"
. Aber wenn ich einfach var1 [[3]] in meiner R-Konsole anrufe, existiert es. Ich bin mir nicht sicher, wohin ich von hier aus gehen soll. Jede Hilfe wäre großartig!
Ich glaube, Sie suchen 'get', aber die Nutzung von 'assign' in einer' for' Schleife lässt mich zusammenzucken. Es gibt bessere Möglichkeiten, wenn Sie etwas Kontext geben. – alistaire
Grundsätzlich habe ich etwa 200 Variablen, die ich über meine Funktion erstellen und senden muss. Innerhalb jeder dieser neu erzeugten Variablen befindet sich eine Liste von Objekten, in denen ich eine (die dritte) verwenden muss, um eine neue Variable zu erstellen. Das einzige Problem, das ich habe, ist das Objekt aus der Liste der Objekte in der ersten neuen Variablen – coderX
aufrufen 'varName' speichert eine einzelne Zeichenfolge hier, das ist der Name der Variablen, also, wenn Sie es aufrufen, erhalten Sie diese Zeichenfolge ('" var1 "'), nicht die Variable 'var1'. Um das zu tun, müsstest du '(varName) [[3]]' 'bekommen. Dies ist jedoch immer noch ein schlechter Ansatz. Es ist besser, Ihre Daten in einem einzigen Datenrahmen oder einer einzigen Liste zu strukturieren, sodass sie in sich iterierbar ist. Darüber hinaus wird Gruppierung und Neuformierung viele Iterationen ohnehin irrelevant machen. – alistaire