2016-06-30 18 views
0

Ich habe eine R-Liste (eigentlich eine Liste von Liste), die Daten enthält, ich möchte eine konvexe Optimierungsprozedur in SAGE ausführen.Zuweisen einer R-Matrix aus einer Liste in eine Sage-Liste

Der Code geht so

sage_list = [None] * 2 
for k in range(2): 
    x = r('my_r_list[[1]][[1]][[k+1]]') 
    sage_list[k] = x._sage_() 

Erste der x Zuordnung ist nicht konsistent. Wenn ich mehrmals den gleichen Code ausführe, erhalte ich unterschiedliche Daten. Aber noch wichtiger ist die sage_list[k] Zuordnung gibt einen Fehler:

NameError: name 'structure' is not defined 

Sie folgendermaßen vorgehen jedoch funktioniert:

sage_list = [None] * 2 
x = r('my_r_list[[1]][[1]][[1]]') 
y = r('my_r_list[[1]][[1]][[2]]') 
sage_list[0] = x._sage_() 
sage_list[1] = y._sage_() 

eine Vorstellung davon, warum? (Natürlich in Wirklichkeit habe ich viel mehr als zwei Wiederholungen)

+1

Es scheint mir, dass Sie in Ihrer for-Schleife 'k' verwenden und erwarten, dass es das Argument von' r' und folglich 'x' ändert. Aber 'k' in dieser Instanz wird nur als eine Zeichenfolge gesehen, ich glaube nicht, dass Sie dort den Wert Ihrer Schleifenvariablen ersetzen. Versuche: 'x = r (paste0 (" meine_r_liste [[1]] [[1]] [[", k + 1,"]] ")' – thepule

Antwort

0

Diese Lösung funktioniert eigentlich

x = r('my_r_list')[[1]][[1]][[k+1]] 

r() Ausbeuten und RElement Objekttyp, über die R Indizierung funktioniert.