首页 文章

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

提问于
浏览
1

我正在尝试调试这行R代码,它是用R版本2.3.x编写的,并且使用rpy调用但现在转移到2.15.3和rpy2,它似乎被打破了?我的矩阵非常大,长度为409x409 . 对角线上都填充了浮动整数(我想?) . 我正在查看拉入的原始矩阵文件,并且错误填充了99999.00 . 其余的单元格格式为## . ##

有问题的代码行:

diag(mymatrix) <- apply(mymatrix, 1, function(x) min(x[x>0], na.rm=T)) * 0.73

返回以下错误:

Traceback(最近一次调用最后一次):文件“”,第1行,在文件“C:\ Python27 \ lib \ site-packages \ rpy2 \ robjects \ functions.py”,第166行,在调用return super(SignatureTranslatedFunction,self ).call(* args,** kwargs)文件“C:\ Python27 \ lib \ site-packages \ rpy2 \ robjects \ functions.py”,第99行,在调用res = super(函数,自我).call(* new_args,** new_kwargs)RRuntimeError:diag中的错误< - (* tmp *,value = c(72999.27,1.3957676,2.79616323829879,:替换对角线长度错误

我查看the SVN.R website以查看 diag 函数的内部工作方式,以查看错误的来源:

if (len.v != 1L && len.v != len.i)
stop("replacement diagonal has wrong length")

我想那就告诉我我的答案,我的替换值不是合适的长度,对吗?那么我该如何让我的替换对角线达到合适的长度以便“粘住”?

EDIT --Added context for troubleshooting purposes--

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

mymatrix <- do.call("rbind", mymatrix)

但现在在2.15.3和Rpy2中,我在阵列上使用这个do.call时出错了 . 它会给我以下错误:

文件“”,第1行,文件“C:\ Python27 \ lib \ site-packages \ rpy2 \ robjects \ functions.py”,第166行,在调用return super(SignatureTranslatedFunction,self).call(* args,* * kwargs)文件“C:\ Python27 \ lib \ site-packages \ rpy2 \ robjects \ functions.py”,第99行,在调用res = super(Function,self).call(* new_args,** new_kwargs)RRuntimeError: do.call中出错(“rbind”,mymatrix):第二个参数必须是一个列表

所以我的_1339814为此只需使用 as.list 将其转换为如下所示的列表:

mymatrix <- do.call("rbind", as.list(mymatrix))

但是现在进一步考虑这个问题,我发现这可能是问题所在 . 我是否需要再次将其转换为对角线才能正常工作,如果是这样,怎么做?

谢谢!

1 回答

  • 1

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

相关问题