2016-04-13 5 views
0

In meinem Code habe ich ein Objekt erstellen, einige Werte zuweisen, so etwas wie folgt aus:Zuordnung über get() und Paste()

assign(paste("a","bis",sep="."),rep(NA,5)) 

dann habe ich einige von ihnen zu ersetzen, wie folgt aus:

Aber ich bekomme den folgenden Fehler: "Fehler in get (einfügen", "bis", sep = ".")) [1: 2] < - 7: 8: Ziel der Zuweisung erweitert auf nichtsprachliches Objekt ".

Natürlich ist der obige Code eine vereinfachte Version des echten. Was ich versuche, ist eine Schleife zu erstellen, die es mir erlaubt, die Ergebnisse einiger Berechnungen in einem Datenrahmen zu ersetzen. So etwas wie diese

assign(paste(country[j],"ext",sep="."), 
     data.frame(Year=rep(unique(get(country[j])$Year),each=24), 
     Age=rep(c(0,1,seq(5,110,5)),length(unique(get(country[j])$Year))), 
     mx=NA,qx=NA,lx=NA,Lx=NA,Tx=NA,ex=NA)) 

get(paste(country[j],".ext",sep=""))$mx[(24*i-24+1):(24*i)] <- 
    c(subset(get(country[j]),Age<=70 & Year==year)$mx,mx.ext) 

in diesem Fall zeigt der Fehler, dass: * Fehler in get (Paste (Land [j] ".ext", sep = "")) $ mx [(24 * i - 24 + 1) :(24 *: konnte nicht funktionieren "< bekommen -" finden *

Vielen Dank im Voraus

+0

rawr neckt mich ein wenig, weil dieses Problem ein bisschen ein petve von mir ist. Sie haben sich selbst in ein bisschen Ecke gemeißelt, indem Sie sich so stark auf "get" und "assign" verlassen. Unter diesen Umständen ist es jedoch oft schwierig, Ihnen zu helfen, da die Lösung Ihren gesamten Ansatz, der oft über den Rahmen einer einzelnen SO-Frage hinausgeht, neu strukturiert. – joran

+1

@rawr [Hier] (http://Stackoverflow.com/a/36336614/324364) ist es, denke ich. – joran

Antwort

2

Sie wäre besser dran, diese Elemente in einer Liste Speicher

myList <- list() 
myList[[paste("a","bis",sep=".")]] <- rep(NA,5)) 

.. oder

myList[[paste(country[j],"ext",sep=".")]] <- data.frame(Year=rep(unique(get(country[j])$Year),each=24), 
          Age=rep(c(0,1,seq(5,110,5)),length(unique(get(country[j])$Year))), 
          mx=NA,qx=NA,lx=NA,Lx=NA,Tx=NA,ex=NA)) 

Dies entlastet Sie von den Schmerzen der get() und assign() und auch für Looping/Anlegen Ihrer Daten in schöner Struktur setzt.

+0

Wunderbar, es funktioniert super. Die Hauptidee bei dieser Art von Problemen ist die Verwendung einer Liste statt der Zuweisung, richtig? Welches ist dann die beste Verwendung für die Zuweisung und Ihrer Meinung nach? – vmgarciag

+0

@vmgarciag Ich würde sagen, die obige Methode ist fast immer vorzuziehen, zuzuweisen. Siehe den folgenden Beitrag: [http://stackoverflow.com/questions/17559390/why-is-assign-bad][assign] – lmo

+0

@vmgarciag Ich benutze 'get' manchmal, wenn ich irgendwann einen String benutzen muss mit 'einfügen', um auf ein Objekt zuzugreifen, normalerweise in einer selbstgeschriebenen Funktion. Höchstwahrscheinlich ist dies Faulheit meinerseits, die in den obigen Ansatz umgearbeitet werden kann. – lmo