R错误:替换对角线的长度错误

R错误:替换对角线的长度错误,r,rpy2,R,Rpy2,我正在试着调试这一行R代码,它是用R版本2.3.x编写并使用R版本2.3.x使用rpy调用的,但现在移动到2.15.3和rpy2,它似乎被破坏了?我的矩阵相当大,长度为409x409.,对角线上填充了浮点整数(我想是吧?)。我正在查看拉入的原始矩阵文件,Diag中填充了99999.00。其余单元格的格式为#### 有问题的违规代码行: diag(mymatrix) <- apply(mymatrix, 1, function(x) min(x[x>0], na.rm=T)) * 0.

我正在试着调试这一行R代码,它是用R版本2.3.x编写并使用R版本2.3.x使用rpy调用的,但现在移动到2.15.3和rpy2,它似乎被破坏了?我的矩阵相当大,长度为409x409.,对角线上填充了浮点整数(我想是吧?)。我正在查看拉入的原始矩阵文件,Diag中填充了99999.00。其余单元格的格式为####

有问题的违规代码行:

diag(mymatrix) <- apply(mymatrix, 1, function(x) min(x[x>0], na.rm=T)) * 0.73
我想这就告诉了我答案,我的重置值不是正确的长度,对吗?那么,我该如何让我的替换对角线达到合适的长度,使其“粘住”

编辑--添加用于故障排除的上下文--

该矩阵最初通过Python脚本生成为409x409数组(使用numpy),并使用
ro.r.assign
进行分配。然后,在我的R脚本中,
mymatrix
最初(在R版本2.3.1中)是通过以下方式调用的:


mymatrix正如@rawr指出的,
do.call(rbind,As.list(mymatrix))
返回一个409x409乘1的矩阵,因此,对角线函数无法正确表达。解决方案是通过R包
plyr
do.call
替换为
rbind.fill
,后者成功地以正确的形式引入矩阵,然后
diag
函数按其应有的方式执行。

应用函数返回多少值?mymatrix中是否有NAs?这是一个好问题。你能阅读我上面的编辑,了解更多内容吗?矩阵中有NAs,但它们最初作为numpy阵列传递。但是,我遇到了这个问题,并将其转换为列表。可能是我需要重新转换它,然后执行对角线,但这就是我丢失的地方。
do.call(rbind,as.list(mymatrix))
会将您的平方[409×409]矩阵转换为[409×409×1]矩阵,所以这很可能是个问题。你为什么试着打电话给rbind?啊..那我怎么能重新转换它呢?还有,有没有比打电话给rbind更好的方法?这段代码不是我写的——它是大约10年前由其他人写的。我正在努力学习R和Python以及所有这些东西,通过清理这些代码,并在这个过程中调试我的模型/在这一行,如果mymatrix已经是一个矩阵,那么就没有任何意义。那一行前面的
str(mymatrix)
是什么?我已经很长时间没有使用r了,所以我不能说do.call在破坏这个代码的更改之前是如何工作的。我还要补充一点,plyr非常有用,在r中操纵矩阵时可以大大提高性能!
if (len.v != 1L && len.v != len.i)
stop("replacement diagonal has wrong length")