对于我的工作项目,我必须执行 PCoA(主坐标分析,又称多维缩放)。但是,当使用 R 执行此分析时,我遇到了一些问题。
函数 cmdscale 只接受矩阵或 dist 作为输入, dist 函数给出错误:
Error: cannot allocate vector of size 4.2 Gb
In addition: Warning messages:
1: In dist(mydata[c(3, 4)], method = "euclidian", diag = FALSE, upper = FALSE) :
Reached total allocation of 4020Mb: see help(memory.size)
2: In dist(mydata[c(3, 4)], method = "euclidian", diag = FALSE, upper = FALSE) :
Reached total allocation of 4020Mb: see help(memory.size)
3: In dist(mydata[c(3, 4)], method = "euclidian", diag = FALSE, upper = FALSE) :
Reached total allocation of 4020Mb: see help(memory.size)
4: In dist(mydata[c(3, 4)], method = "euclidian", diag = FALSE, upper = FALSE) :
Reached total allocation of 4020Mb: see help(memory.size)
当我使用矩阵时,它会将输入更改为:
[,1]
[1,] Integer,33741
[2,] Integer,33741
数据集的内容无法在线发布,但我可以为您提供尺寸:数据集长 33741 行,宽 11 列,第一列是 ID,其他 10 个值需要用于 PCoA。
正如您在错误中看到的那样,我只使用了 2 列,并且已经出现内存错误。
现在我的问题
是:是否可以通过 dist 函数的内存限制来管理数据?
我在矩阵函数中做错了什么,它将向量更改为 2 列 2 行输出?
我试过的:用垃圾收集清除,重新启动 GUI,重新启动系统。
系统:Windows 7 x64 i7 920qm 1.8ghz 4GB DDR3 内存
使用的代码:
mydata <- read.table(file, header=TRUE)
mydist <- dist(mydata[c(3,4)], method="euclidian", diag=FALSE, upper=FALSE)
mymatrix <- matrix(mydata[c(3,4)], byrow=FALSE)
mymatrix <- matrix(cbind(mydata[c(3,4)]))
mycmdscale <- cmdscale(mydist, k=2, eig=FALSE, add=FALSE, x.ret=FALSE)
mycmdscale <- cmdscale(mymatrix, k=2, eig=FALSE, add=FALSE, x.ret=FALSE)
plot(mycmdscale)
当然,我没有按此顺序运行代码,但此代码包含我尝试加载数据的方法。
提前感谢您的任何回复。