【问题标题】:Non-conformable arguments when using mapply使用 mapply 时参数不一致
【发布时间】:2019-05-29 22:59:13
【问题描述】:

我有一个如下所示的函数 func:

func<- function(beta,X){
  res <-  t(beta) %*% t(X) %*% X %*% beta
  return(res)
}

其中 X = 设计矩阵,我有两个矩阵

b1 <- matrix(data = c(0.8, 3.6), nrow = 2, ncol = 1)
b2 <- matrix(data = c(1.56, 0.27), nrow = 2, ncol = 1)

当我在每个矩阵上调用该函数时,它工作正常,并产生一个结果。

func(b2,xm)
         [,1]
[1,] 213.6931

func(b1,xm)
         [,1]
[1,] 23138.99

但是,当我将这两个矩阵添加到列表中并尝试使用 mapply 调用 func 时,我得到一个不符合要求的参数错误。

b3 <- list(b1,b2)
mapply(func, c, X=xm)
#Error in t(beta) %*% t(X) : non-conformable arguments

我不明白为什么会这样。任何帮助将不胜感激。

【问题讨论】:

  • 您的代码中的xm 是什么?
  • @phiver 是设计矩阵 X。它是一个有 2 列 n 行的矩阵。
  • 你可能也需要通过它,mapply(func, b3, list(xm))
  • @RLave 啊。这是一个错字。我会编辑问题,忘了把它放在 mapply 中
  • 这里用sapply就够了,像这样sapply(b3, func, xm)

标签: r matrix matrix-multiplication


【解决方案1】:

只需将xm 传递为list()

mapply(func, b3, list(xm))
[1] 390.5600  23.2569

数据:

xm <- matrix(1:4, ncol=2,nrow=2)
b1 <- matrix(data = c(0.8, 3.6), nrow = 2, ncol = 1)
b2 <- matrix(data = c(1.56, 0.27), nrow = 2, ncol = 1)
b3 <- list(b1,b2)

func<- function(beta,X){
  res <-  t(beta) %*% t(X) %*% X %*% beta
  return(res)
}

【讨论】:

  • 嗯,它似乎确实有效,但我不知道为什么。是不是因为你使用 mapply 传递的任何东西都需要是一个列表?
  • mapply 你也可以传递两个向量。可能这里 R 有一些混淆,因为你传递了一个列表和一个矩阵,可能有问题。
猜你喜欢
  • 2020-06-27
  • 1970-01-01
  • 1970-01-01
  • 2016-04-17
  • 1970-01-01
  • 2021-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多