要替换的项目数不是R中替换长度错误的倍数

时间:2018-12-20 15:45:47

标签: r for-loop matrix

我尝试运行以下循环,但始终收到错误“要替换的项目数不是替换长度的倍数”。谁能帮我了解为什么会这样?另外,我需要以某种方式将角度矢量包含到矩阵中,并且不知道如何。到目前为止,这是我的循环:

anglematrix <- numeric()
for(i in 1:length(fish2$X))
{
    a1 <- as.numeric(fish2[1, c(1,2)])
    a2 <- as.numeric(fish2[1 + 1, c(1,2)])
    a3 <- as.numeric(fish2[1 + 2, c(1,2)])

    angles <- Angle(a1, a2, a3, label=FALSE)
    anglematrix[i] <- matrix(NA, nrow=length(fish2$X)-2, ncol=1)
}

这是我的数据集的前六行结构

structure(list(X = c(147.8333333, 148.5, 151.1666667, 154.5,158.1666667, 161.5), Y = c(258.5, 258.8333333, 260.8333333, 264.5,266.5, 269.5)), row.names = c(NA, 6L), class = "data.frame")
在矩阵内的单列中,

输出应为176个角度计算。感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您的原始代码中有很多地方出错,但是以下工作有效,并且应该为您提供有关错误地方的指导。可能要看的最重要的事情是,您应该在循环之前定义一个空矩阵,并使用迭代器i指定每次更新哪个值来在循环内填充其值。注意:我假设您使用的是Angle中的library(LearnGeom),因为您未指定此函数的来源:

Nangles = NROW(fish2) - 2
anglematrix = matrix(nr = Nangles, nc=1)

for(i in 1:Nangles) {
  a1 <- as.numeric(fish2[i, ])
  a2 <- as.numeric(fish2[i + 1, ])
  a3 <- as.numeric(fish2[i + 2, ])
  anglematrix[i] <- Angle(a1, a2, a3, label=FALSE)
}