-1

我有一个列表列表的圣人列表,它是某些函​​数应用于列表列表的 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 列表以便将其保存到.RData文件中

关于 Sage 与 R 接口的文档主要是关于从 R 到 Sage,而不是相反。这个问题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) output_my_r_list[0][0]`将 sagemath 矩阵转换为 R 矩阵,which gives no error but the output is not correct as doing并没有给出最后一级的列表,而是直接给出一些值。

可重现的代码(绕过 R 到 Sage 部分)将是:

    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 列表

4

1 回答 1

0

这里的关键是你的陈述

我也尝试了output_my_r_list = r(output_my_sage_list)没有错误但输出不正确的简单方法,因为这样output_my_r_list[0][0]做没有给出最后一级的列表,而是直接给出了一些值。

Sage 实际上记录了它将使列表只是一个连接列表,或者更准确地说是一个 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

这直接以 R 的用法为模型,并且可能(通过一些嵌套过程)甚至来自它:

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.

所以你的牛肉不完全是 Sage,而是 R,因为(不知何故)Sage 在这里得到了“正确”的东西。Sage 这样做是因为 这里

def _left_list_delim(self):
    return "c("

然后 R 行为随之而来,因为这是递归完成的,它生成了一个向量向量。

解决此问题的方法是返回"list("那里。另一种技巧是尝试使用r.eval("list(something)"),但我并没有取得很大的成功。

当然,如果能找到一种更容易处理这个问题的方法会很好,并且在返回方向上,Sage尝试采用嵌套的 R 内容并保持它的嵌套(我不知道成功是什么)。

于 2016-07-05T22:01:37.963 回答