我一直在查看关于 SO 和其他地方的各种讨论,并且普遍的共识似乎是,如果从 R 函数返回多个不相似的数据结构,最好将它们作为 a 返回,list(a, b)
然后由索引访问0
等等1
上。除了在 Perl 程序中通过 PL/R 使用 R 函数时,Rlist
函数将列表展平,甚至对数字进行字符串化。例如
my $res = $sth->fetchrow_arrayref;
# now, $res is a single, flattened, stringified list
# even though the R function was supposed to return
# list([1, "foo", 3], [2, "bar"])
#
# instead, $res looks like c(\"1\", \""foo"\", \"3\", \"2\", \""bar"\")
# or some such nonsense
使用 adata.frame
不起作用,因为返回的两个数组不是对称的,并且函数会发出嘶哑的声音。
那么,如何从由任意一组嵌套数据结构组成的 R 函数返回单个数据结构,并且仍然能够从 Perl 简单地访问每个单独的包$res->[0]
,$res->[1]
或者$res->{'employees'}
,$res->{'pets'}
?更新:我正在寻找 Perl[[1, "foo", 3], [2, "bar"]]
或什至的 R equiv[[1, "foo", 3], {a => 2, b => "bar"}]
附录:我的问题的主旨是如何从 PL/R 函数返回多个不同的数据结构。但是,如上所述,二级字符串化也是有问题的,因为我将数据转换为 JSON,所有这些额外的引号只会添加到服务器和用户之间传输的无用数据中。