我是一名硕士生,试图将R用于我的论文,但我对R非常陌生,我没有任何编程经验,所以请温柔!我尝试在{geomorph}包中使用一堆3D坐标数据来运行标准几何形态分析。为了方便起见,我已将数据拆分为更小的.csv文件。将二维矩阵转换为三维数组时出错R
我已经设置了数据文件的方式:
X1 - Y1 - Z1 - X2 - Y2 - Z2 - … - Z215
[Indiv.1] 323 - 87 - 68 - 323 - 87 - 68 - - 0
[Indiv.2] 363 - 88 - 81 - 363 - 88 - 81 - - 77
[Indiv.3] 335 - 77 - 70 - 335 - 77 - 70 - - 0
[Indiv.4] 359 - 71 - 81 - 359 - 71 - 81 - - 0
…
[Indiv.50] 366 - 71 - 92 - 367 - 72 - 91 - - 0
我导入至R使用read.table
就好(尺寸为50×645),并且我甚至可以将所产生的数据帧分成矩阵使用as.matrix
(保持50 x 645维度)。但是,当我使用arrayspecs
{geomorph}将数据转换为数组(尺寸为215 x 3 x 50)时,我得到了超过50条警告,指出“数据长度不是数字的倍数或倍数行”。我一直在使用
> WM.array<-arrayspecs(WM.mat,215,3,byLand=F)
但每次我运行此命令时,我得到了警告,“数据长度不是一个子多或行数的倍数。”我相信{geomorph}想在一个数据具有3列(X,Y,Z)和215行(坐标点的最大数量)的3D数组,找到实际解决此错误的参考(至少没有任何这是我可以理解的)。在此先感谢。
我用一个随机50×645矩阵代码,并没有产生任何警告或错误:'垫< - 矩阵(runif(50 * 645 ),nrow = 50,ncol = 645)';昏暗(垫子)#[1] 50 645'; 'spec.mat < - arrayspecs(mat,215,3,byLand = F)'; dim(spec.mat)#[1] 215 3 50'。我猜想你的数据可能有问题,但由于你已经检查了他们的维度,所以我没有什么可以猜测的。 –
谢谢!我最终在第一列中创建了非数字值,我试图创建行名,这是我的问题似乎已经出现的地方。我删除了这一栏,并安全地转移到了我的数据中。再次感谢! –
将来可以避免在调用'read.table'时通过使用'row.names = 1'来删除应该是行名的第一列。参见'read.table'中的参数'row.names'。祝你好运! ;) –