我是一名硕士生,试图将R用于我的论文,但我对R非常新,我没有任何编程经验,所以请保持温和!我有一堆3D坐标数据,我试图在{geomorph}包中使用它来运行标准的几何形态分析。为方便起见,我将数据拆分为较小的.csv文件。
我已经按以下方式设置了数据文件:
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
我使用read.table
导入到R就好了(尺寸为50 x 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行(最大坐标点数),第三维是50个人。
任何有关解决此问题的帮助都会非常感激,因为我找不到实际解决此错误的参考(至少没有一个对我来说是可以理解的)。提前谢谢。
答案 0 :(得分:1)
矩阵或数组实际上是折叠向量,行是&#34;第一维&#34;。所以只是&#34; redimensioning&#34;通过重新分配维度属性真的很危险。我认为如果你想首先使用645尺寸,你需要首先转置那个矩阵,这样你就可以通过分成215 x 3段来重新定尺寸:试试这个:
WM.array<-t( WM.mat)
dim( WM.array) <- c(215, 3, 50)
另一种方法是使用函数aperm
:
WM.array<- WM.mat)
dim( WM.array) <- c(50, 215, 3)
WM.array <- aperm(WM.array, c(2,3,1) )
aperm
的第二个参数是编号旧维度的新顺序。一如既往,您应该使用小型测试对象:
arr <- array(1:(2*3*4), c(2,3,4) )
arr
mat <- matrix(1:(2*3*4), 2)
mat
答案 1 :(得分:0)
数组的维数只是一个属性。你或许可以去
dim(WM.mat) <- c(215, 3, 50)
取决于数据的排列方式以及arrayspecs
的其他内容。