R要替换的项目数不是替换长度/结果的倍数,但是正确

时间:2014-02-28 15:39:30

标签: r for-loop warnings

我知道已经有了一些线索,但是经过那些我无法弄清楚问题可能是什么 - 请原谅我......

我正在尝试运行代码

  for (i in 1:a){
    matrix$new_column[i]<-which(matrix[i,1:b-1]==matrix$col_b[i])
  }

我的尝试是: 对于 a 行和 b 列的矩阵,在每行的列中 2 b -1 ,找到包含与 b 列中的值相同的值(总是有这样的值)并将相应的列号写入* new_column *

我的代码不断抛出错误

  

矩阵中的警告$ new_column [i]&lt; - which(matrix [i,:number of   要替换的项目不是替换长度的倍数

然而,结果是完全正确的。我试过了

  • 创建* new_column *首先填充0s
  • 将结束索引从 a 更改为 a-1 a + 1

如上所述,结果是正确的,但如果我做的一切正确,我觉得我不应该收到警告信息,所以我真的很感激任何关于如何解决这个问题的建议。

最后,不要问我为什么选择1:b-1当我想从2变为b-1时,我只是看到当我使用2:b-1时,它会在列中开始3 ..

2 个答案:

答案 0 :(得分:6)

如果有多个匹配项,

which()可以返回一个向量。例如:

which((1:12)%%2 == 0) # which are even?

matrix$col_b[i]是唯一的吗?结果可能看起来仍然正确。请注意在这种情况下会发生什么:

x <- 1:2
x[1] <- 3:4
x

另外,1:b-1不会向您提供从1b - 1的数字,而是从1b的数字,全部减去1 }:

b <- 10
1:b-1

您需要使用括号来强制减法:1:(b - 1)

答案 1 :(得分:0)

或如果要创建Y的五个向量,请尝试执行此操作。

set.seed(101)
    lambda_j <- rgamma(1000,1,1)

    Y <- matrix(NA, nrow=1000, ncol=5)
for (j in 1:ncol(Y)) {
  for(i in 1:nrow(Y)) {
    Y[,j] <- rpois(1000,lambda_j)
  }
}