【问题标题】:Append vectors together in for loop在 for 循环中将向量附加在一起
【发布时间】:2021-05-25 15:16:02
【问题描述】:

我试图在每次迭代后附加一个 for 循环的结果,该循环会产生一个不同长度的向量。我需要在每列中并排显示每个循环的结果。这是我得到的错误:

data.frame(..., check.names = FALSE) 中的错误: 参数暗示不同的行数:0, 3650

我已经用相同大小的向量对此进行了测试,但我得到了同样的错误。我尝试了一些我在这里找到的解决方案:Append data frames together in a for loop 但没有成功,其中一些有效,但结果出现在单个列中。我该如何解决这个问题?

d = NULL
for (i in 1:10) {

  # vector output
  model <- # vector with different length for each iteration

  # add vector to a dataframe
  df <- data.frame(model)

}

df_total <- cbind(d,df)

【问题讨论】:

  • 请参考我们关于可重现示例的指南:stackoverflow.com/a/5963610/6574038
  • 1) 在循环中,您正在重写df 10 次,只有最后一个是cbinded 和d; 2) 错误消息显示 "Error etc number of rows: 0, 3650" 实际上d &lt;- NULL 有 0 行。因此,在最后一次迭代中,您的模型必须生成具有 3650 行的 df
  • 3) 考虑d &lt;- lapply(1:10, function(i) {model &lt;- code; data.frame(model)}); df_total &lt;- do.call(cbind, d)
  • 谢谢Rui,您的解决方案解决了初始错误,但现在我有另一个错误。我的向量有不同的长度,所以我不能使用 cbind。你能帮我换一种方法吗?

标签: r


【解决方案1】:

使用lapply 返回您的代码,该代码将生成一个列表。由于向量的长度不等,您可以将NA 附加到较短长度的向量并将它们绑定在一起。

tmp <- lapply(1:10, function(x) {your code here})
n <- max(lengths(tmp))
result <- data.frame(sapply(tmp, `[`, 1:n))

【讨论】:

    猜你喜欢
    • 2015-06-06
    • 2021-06-24
    • 2019-04-09
    • 2015-01-13
    • 1970-01-01
    • 2021-12-15
    • 2020-10-25
    • 1970-01-01
    相关资源
    最近更新 更多