【问题标题】:R loop missing value where TRUE/FALSE needed需要 TRUE/FALSE 的 R 循环缺失值
【发布时间】:2016-11-06 18:44:43
【问题描述】:

我在 R 中有这段代码:

j <- 1
k <- nrow(group_IDs)

  while (j <= k)
        {   
            d_clust <- Mclust(Customers_Attibutes_s[which    (Customers_Attibutes_s$Group_ID == group_IDs$Group_ID[j]),3:7], G=2:7)
            temp <- cbind(Customers_Attibutes[which        (Customers_Attibutes$Group_ID == group_IDs$Group_ID[j]),], as.data.frame    (predict.Mclust(d_clust, Customers_Attibutes[which(Customers_Attibutes$Group_ID     == group_IDs$Group_ID[j]), 3:7]))[1])
            temp_ <- rbind(temp,temp_)
            j <- j+1
        }

while 语句中的j &lt;= k 返回此错误:

需要 TRUE/FALSE 的地方缺少值。

group_IDs 不为空,在这种情况下它实际上包含值 8。 好像进入了循环,在第二轮就崩溃了。

【问题讨论】:

  • 你能告诉我们group_IDs是什么样的吗?
  • nrow(group_IDs) 返回什么?
  • nrow(group_IDs) 是一个向量,在这种情况下只包含一个值。该值是数字 8,但它可以是任何数字序列。

标签: r loops na


【解决方案1】:

您可以使用for 解决索引问题,例如:

for (ID in group_IDs) {}

当然,这假设 group_IDs 是一个值向量。

注意:您的代码在循环 group_IDs$Group_ID[j] 内显示以下内容,这意味着不是向量;也许你的意思是group_IDs[j]

【讨论】:

  • 从技术上讲,它是一个包含一列的数据框。我也试过了。
  • 在这种情况下:for (ID in group_IDs$Group_ID)
【解决方案2】:

由于group_ IDs 是一个向量,请尝试使用length(group_IDs) 而不是nrow。向量没有行,因此等价于 length

这是我怀疑正在发生的事情:

> group_IDs <- 8
> nrow(group_IDs)
NULL

【讨论】:

  • 我不知道 nrow 可以返回一个向量? OP在原始问题中指定“group_IDs ...包含值8”,所以我假设这是他们所说的向量?
  • 无论是 Length 还是 nrow 都会抛出同样的错误。
  • 从技术上讲,它是一个只有一列的数据框
  • Group_IDs 是这样生成的:group_IDs
  • 那么nrow(group_IDs) 会返回1 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-17
  • 2015-06-28
  • 1970-01-01
  • 2019-03-07
  • 2018-07-12
相关资源
最近更新 更多