2016-03-23 17 views
1

Ich versuche, verschachtelte sl4-Klassen-Slots in R auf dynamisch zuweisen. Was ich bisher habe, ist der folgende Code. Ich erstelle die folgenden verschachtelten Klassen, die mit dem verschachtelten Slot des Typs numerisch enden.Dynamisch erstellen verschachtelte SL4-Klassen-Slot-Namen und zuweisen Werte in R

setClass('slot', slots = c(slot = 'numeric')) 
setClass('object', slots = c(slot = 'slot')) 
object = new('object') 
[email protected]@slot 

Typische assignement wie erwartet funktioniert:

[email protected]@slot = 1 

oder:

slot([email protected], "slot") <- 1 

Was ich tun möchte jedoch eine dynamische Erstellung der Schlitznamen für die Zuordnung zum Beispiel mit einfügen aus einem Vektor wie zB

slot_path = c("object", "slot", "slot") 

Mit eval und Parse funktioniert der Trick die Zeichenfolge in das Objekt zu konvertieren und zeigt mir das Objekt oder in diesem Fall hier den Schlitz des Objekts.

Die Zuweisung von Werten zu dieser Art von Konstrukt scheint jedoch nicht wie erwartet zu funktionieren.

eval(parse(text = paste(slot_path, collapse="@"))) <- 2 

gibt mir den Fehler, der sagt:

Error in file(filename, "r") : cannot open the connection.

Wenn ich den Pfad manuell wie das Einfügen:

eval(parse(text = "[email protected]@slot")) <- 1 

ich den Fehler, der sagt:

Error in eval(parse(text = "[email protected]@slot")) <- 1 : target of assignment expands to non-language object

Versuchen, mit derzuzuweisenfunktioniert auch nicht den Trick. Der Anruf unter:

assign(x = slot(eval(parse(text = "[email protected]")), "slot"), value = 1) 

gibt mir den Fehler:

Error in assign(x = slot(eval(parse(text = "[email protected]")), "slot"), value = 1) : invalid first argument

Jede Hilfe mit, dass geschätzt würde.

+0

Schlitz ein Zuweisungsverfahren hat, ist es das, was Sie wollen? '? Methoden :: \' slot <- \ " – rawr

+0

Nein, das funktioniert nicht: Fehler im Steckplatz (eval (parse (text =" Objekt @ slot "))," slot ") <-" test ": Ziel der Zuweisung erweitert zu nicht-Sprache Objekt –

+0

Deshalb verwendete ich die assign-Funktion, da dies die Zuordnung von Werten zu komplexen Strings behandeln sollte. –

Antwort

0

fand ich eine Lösung:

Für numerische:

eval(parse(text = eval(expression(paste(pasted_slot_path, "<-", value))))) 

Für Charakter:

value = sprintf('"%s"',value) 
    eval(parse(text = eval(expression(paste(pasted_slot_path, "<-", value)))))