我有一个列表列表的sage列表,它是在列表列表的R列表上应用的某些函数的结果(转换为sage格式)
代码如下:
%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但不是相反。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){ {1}} output_my_r_list [0] [0]`不提供最后一级列表但直接给出一些值。
可重现的代码(绕过R到Sage部分)将是:
which gives no error but the output is not correct as doing
我想将 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
转换为R列表
答案 0 :(得分:0)
这里的关键是你的陈述
我还尝试了简单的
output_my_r_list = r(output_my_sage_list)
,它没有给出任何错误,但是输出不正确,因为执行output_my_r_list[0][0]
不会给出最后一级列表,而是直接给出一些值。
Sage实际上记录了它会使列表只是一个连接列表,或者更恰当地是R vector :
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.
所以你的牛肉并不完全与Sage相关,但是R,因为(不知何故)Sage在这里得到了'正确'的东西。 Sage这样做是因为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找到一种更轻松地处理这个问题的方法会很高兴(我不知道会取得什么成功)。