【问题标题】:number of items to replace is not a multiple of replacement length error in R要替换的项目数不是R中替换长度错误的倍数
【发布时间】:2018-12-20 15:45:46
【问题描述】:

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

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 个角度计算。感谢您的帮助!

【问题讨论】:

  • 它是重复的。我只是忘了删除原来的问题。现在修好了。创建了一个新问题,因为前一个问题的编辑太混乱了
  • 为了将来的参考,您不应该真正删除和替换问题。您应该只编辑现有的来解决问题。我仍然看到当前版本存在问题,例如您没有提供实际数据(为此请使用dput)。
  • 对不起,我是这个网站和 R 的新手。我添加了数据集的结构和前六行。

标签: r for-loop matrix


【解决方案1】:

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

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)
}

【讨论】:

  • 非常感谢 dww 这工作得很好。我清楚地看到我做错了什么,这一切都是有道理的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多