2016-07-04 287 views
-1

我有一个列表列表的清单列表,它是列表列表的一个R列表上应用的某些功能的结果(转换为Sage格式)将Sage列表列表转换为R列表列表

的代码是这样的:

%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]) 

我想output_my_sage_list转换回成R列表,以便它有R保存到一个.RData文件的接口贤者

文档主要是关于从去R到Sage,但不是另一种方式d。 This question使用r.matrix()' so i tried using 'r.list()' but with no luck. I also tried the simple将sagemath矩阵转换为R矩阵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]`不给出列表的最后一级,而是直接给出一些值。

一个可重复的代码(绕过R键贤者部分)将是:

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 

我想output_d转换的R列表

回答

0

这里的关键是你的发言

我也尝试了简单的output_my_r_list = r(output_my_sage_list),它不给出错误,但输出不正确,因为做output_my_r_list[0][0]不给列表的最后一级,但直接一些val UE的。

贤者实际上文件,这将使列表只是一个连续清单,或者更恰当的R 矢量

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 

这是直接modeled upon R usage,想必(通过一些嵌套程序)甚至只是来自于它:

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. 

所以你的牛肉是不完全与鼠尾草,但R,因为(在某种程度上)贤者在这里得到“正确”的事情。贤者这样做是因为here它说

def _left_list_delim(self): 
    return "c(" 

,然后将R行为遵循,因为这是完成递归,它使向量的向量。

对此的破解将在那里返回"list("。另一个黑客将尝试使用r.eval("list(something)"),但我没有经历过很多成功与此。

这将是很好找到一种方式来处理这个更容易,当然,并在返回方向Sage attempts to take nested R stuff and keep it nested(有什么成功,我不知道)。