2016-07-04 28 views
-1

Ich habe eine Liste der Liste der Liste, die das Ergebnis einer Funktion über eine R Liste der Liste (konvertiert in Salbei Format)konvertieren Sage Liste der Liste der Liste zu R Liste der Liste der Liste

ist

Der Code lautet:

%r 
my_r_list<-load("my_r_list.RData") 

for d in range(D): 
    for s in range(S): 
     for c in range(C): 
      my_sage_list[d][s][c] = ("my_r_list")[[d+1]][[s+1]][[c+1]]._sage_() 
      output_my_sage_list[d][s][c] = some_function(my_sage_list[d][s][c]) 

I output_my_sage_list zurück in eine R-Liste konvertieren möchten, um sie in eine .RData

Datei speichern

Dokumentation auf der Schnittstelle Sage mit R ist in erster Linie um aus gehen R zu Sage, aber nicht umgekehrt d. This question betrifft die Umwandlung einer Sagemath-Matrix in R-Matrix mit r.matrix()' so i tried using 'r.list()' but with no luck. I also tried the simple output_my_r_list = r (output_my_sage_list) which gives no error but the output is not correct as doing output_my_r_list [0] [0] `gibt nicht die letzte Ebene der Liste, sondern direkt einige Werte.

Ein reproduzierbarer Code (die R Sage Teil unter Umgehung) wäre:

output_d = [[] for _ in range(9)] 
    for d in range(9): 
     output_s = [[] for _ in range(4)] 
     output_d[d] = output_s 
     for s in range(4): 
      output_c = [[] for _ in range(2)] 
      output_s[s] = output_c 
      for k in range(2): 
       res = random() 
       output_c[k] = res 

Ich möchte output_d auf eine R-Liste konvertieren

Antwort

0

Der Schlüssel hier ist Ihre Aussage

Ich probierte auch die einfache output_my_r_list = r(output_my_sage_list), die keinen Fehler gibt, aber die Ausgabe ist nicht korrekt, da output_my_r_list[0][0] gibt nicht die letzte Ebene der Liste, sondern direkt einige val Ue.

Sage tatsächlich Dokumente, die er die Liste machen nur eine verkettete Liste, oder genauer ein R Vektor:

sage: x = r([10.4,5.6,3.1,6.4,21.7]); x 
    [1] 10.4 5.6 3.1 6.4 21.7 

The following assignment creates a vector $y$ with 11 entries which 
consists of two copies of $x$ with a 0 in between:: 

    sage: y = r([x,0,x]); y 
    [1] 10.4 5.6 3.1 6.4 21.7 0.0 10.4 5.6 3.1 6.4 21.7 

Dies ist direkt modeled upon R usage und vermutlich (über einige Verschachtelung Verfahren) sogar nur kommt von ihm:

The further assignment 

> y <- c(x, 0, x) 

would create a vector y with 11 entries consisting of two copies of 
with a zero in the middle place. 

Also Ihr Rindfleisch ist nicht gerade mit Salbei, aber R, wie (irgendwie) Sage bekommt die ‚richtige‘ Sache hier. Sage tut dies, weil here sagt es

def _left_list_delim(self): 
    return "c(" 

und dann folgt der R Verhalten, da dies rekursiv durchgeführt wird, und es macht einen Vektor von Vektoren.

Ein Hack um dies wäre "list(" dort zurückzukehren. Ein weiterer Hack wäre, zu versuchen, r.eval("list(something)") zu verwenden, aber ich habe nicht viel Erfolg mit diesem erfahren.

Es wäre schön, einen Weg zu finden, damit natürlich leichter umzugehen, und in der Rückrichtung Sage attempts to take nested R stuff and keep it nested (mit welchem ​​Erfolg, weiß ich nicht).

Verwandte Themen