【问题标题】:Errors while using cbind with a matrix将 cbind 与矩阵一起使用时出错
【发布时间】:2016-03-29 13:30:28
【问题描述】:

我有一个包含 40 个数据集的列表,它们都具有相同的列。我想绑定每个数据集的第 7 列。我考虑过使用 cbind 对矩阵进行此操作。这是我的代码:

RetRates <- function(q) {
    q <- matrix(nrow = 766, ncol = length(ListeActions),
                data = rep(0, 766), byrow = TRUE)
    s <- 0
    for (i in 1:length(ListeActions)) {
        x <- ListeActions[[i]]
        q[,i] <- cbind(q[,i], x[,9])  ## I need the 9th column
    }
    return(q)
}

Hedi <- matrix(nrow = 766, ncol = length(ListeActions),
               data = rep(0, 766), byrow = TRUE)
Hedi <- RetRates(Hedi)

我收到以下警告:

警告信息: 1: In replace(q[, i], 1:766, x[, 9]) : 数字 要替换的对象的数量不是大小的倍数 替换!

【问题讨论】:

  • ListeActions 是什么?你的例子是不可复制的。可以提供一份吗?您会收到警告,因为您尝试将 q[,i] 替换为 cbind(q[,i], x[,9]),这是 2 个元素。您要做的是绑定第 7 列或第 9 列? (与您的问题中的信息不同)
  • q 在您的函数中定义。如果你想把它当作论据,你应该把它拿出来。

标签: r cbind


【解决方案1】:

让我们举一个更小的例子:cbind 这 3 个矩阵的第 5 列

d1 <- matrix(runif(30), 5, 6)
d2 <- matrix(rnorm(30), 5, 6)
d3 <- matrix(rnorm(30), 5, 6)

首先我们将 3 个矩阵放在一个列表中

M <- list(d1=d1, d2=d2, d3=d3)

然后我们可以使用for 循环

res1 <- matrix(NA, nrow=5, ncol=length(M))
for (i in 1:length(M)) {
  res1[, i] <- M[[i]][,5]
}

或者我们可以使用一些神奇的 R 函数通过一个稍微晦涩的命令得到结果

res2 <- do.call(cbind, lapply(M, "[",,5))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多