【问题标题】:How to use cbind within a loop to create a matrix如何在循环中使用 cbind 创建矩阵
【发布时间】:2019-12-06 07:13:19
【问题描述】:

我正在尝试在 R 中编写一个函数,该函数返回一个由 k 列组成的矩阵,其中 k 是一个函数参数。

这些列是通过循环在函数内部形成的,我使用 (assign(paste), i) 将它们命名为 col.1,...,col.i。到目前为止一切顺利,代码可以正确生成列向量。

函数中已经定义了向量,col.2 到 col.k。 X 也被定义为等于 col.1。

然后我尝试在函数中使用循环来 cbind() 列,如下所示:

for (i in 2:k){
X <- cbind(X, col.i)
}

错误信息是“object 'col.i' not found”。

我没有太多的编码经验,所以这可能是初学者的错误,但我会很感激任何建议。

【问题讨论】:

  • X &lt;- cbind(X, get(col.i))怎么样
  • 我不确定您要做什么,但这似乎不是正确的方法。就你的循环而言,最明显的错误是cbind(X, col.i),它必须是cbind(X, paste0('col.', i))
  • 快速解决方案:get(paste0('col.', i)),然而,你应该重新考虑你解决这个问题的方法——用col.1col.2、...对象弄乱你的命名空间并不是很好。即使将它们保存在list(col.1, col.2, col.3) 之类的列表中,您也可以只提取l[[i]](已经更干净了)
  • 感谢 cmets,但我无法解决问题。我可以换一种说法吗?给定一组在函数中定义和命名的 k 个向量,其中 k 是函数参数,如何从这些向量创建矩阵?

标签: r


【解决方案1】:

试试

df <- do.call(rbind, mget(paste0('col', 1:k)))

或者使用dplyrdata.table

df <- dplyr::bind_rows(mget(paste0('col', 1:k)))

df <- data.table::rbindlist(mget(paste0('col', 1:k)))

这将从col1colk 的所有向量作为数据框df 中的列返回。

【讨论】:

  • 效果很好,让我可以在函数内将列绑定到矩阵中。谢谢。
猜你喜欢
  • 2011-07-21
  • 2014-09-03
  • 2018-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
相关资源
最近更新 更多