【问题标题】:for loop question in r :number of items to replace is not a multiple of replacement lengthr中的for循环问题:要替换的项目数不是替换长度的倍数
【发布时间】:2020-04-12 03:17:23
【问题描述】:

全部

我是 R 新手。我尝试了很多方法,但仍然无法解决它。谁能帮忙查一下?

我正在尝试生成 3 乘以 100 的随机值,这些值遵循卡方分布。控制台说“要替换的项目数不是替换长度的倍数”。有什么提示可以解决吗??

for(i in 1:3) {
  x1[i] <- rchisq(100, df=2)
  n1[i] <- length(x1[i])
}

【问题讨论】:

  • 这是你想要做的吗? for(i in 1:3){ x1 &lt;- rchisq(100, df=2) n1 &lt;- length(x1) print(x1[n1]) }
  • 尝试使用双方括号:x1[[i]] &lt;- rchisq(100, df=2)

标签: r


【解决方案1】:

这取决于您要使用的容器。我想到了两个容器,一个列表或矩阵。

# list format
x1 = list();
n1 = vector();
for(i in 1:3) {
  x1[[i]] <- rchisq(100, df=2)
  n1[i] <- length(x1[[i]])
}

注意 cmets 中提到的双括号 [[i]]

# matrix format
x1 = matrix(NA, nrow = 100, ncol = 3)
n1 = vector();
for(i in 1:3) {
  x1[,i] <- rchisq(100, df=2)
  n1[i] <- length(x1[,i])
}

【讨论】:

  • @linlin 如果它回答了您的问题,您能否将问题标记为正确。干杯
【解决方案2】:

作为对您的问题的解释:您试图将一个包含 100 个元素的向量存储到一个向量 x1 的单个元素 ith 中。为了说明,您可以将值向量放入相同长度的向量中:

x <- rnorm(6, 0, 1)
x[1:3] <- c(1,2,3)
x
## [1]  1.0000000  2.0000000  3.0000000 -0.8652300  1.3776699 -0.8817483

您可以将它们存储到一个列表中,列表的每个元素都是一个可以是任意长度的向量。您将需要双方括号。

x1 <- list()
for(i in 1:3) {
  x1[[i]] <- rchisq(100, df=2)
  n1[i] <- length(x1[[i]])
}

列表和向量是 R 中不同类型的数据结构,您可以在 advanced R 中阅读很多关于它们的信息。

【讨论】:

  • 您需要在 list 元素的 length() 函数中使用双括号
  • 很好发现 - 谢谢。以为我已经这样做了,但一定忘记了!
猜你喜欢
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多