将一个列表中的项目与另一个列表中的项目相乘

时间:2015-10-26 11:43:12

标签: r

我正在尝试将计算应用于64个项目的列表。我有两个清单。第一个列表称为CJAN,它是包含两个数字的64个线性模型的列表 - 整数和斜率系数,如下所示。第二个列表名为JAN.FUT,它是包含251个数字的64个文件的列表,如下所示。

CJAN    List of 64
file1: Named num[1:2] -92.37 1.02
..-attr(*, "names")= chr [1:2] "(Intercept)" "x$x"
-----------------------------------
file64 Named num[1:2] -45.42 0.98
..-attr(*, "names")= chr [1:2] "(Intercept)" "x$x"


JAN.FUT    List of 64
file1: num[1:251] 126 164...
-----------------------------------
file64: num[1:251] 150 126...

我想将JAN.FUT列表中的所有项目与CJAN列表中的截距值相乘,然后将斜率系数(x $ x)添加到结果计算中。这是我解决使用带有列表的预测函数的难度的方法。我试过了:

PRED=lapply(JAN.FUT, function(x) (x*CJAN["x$x"])+CJAN["(Intercept)"])

但我收到错误消息:

Error in x * CJAN["x$x"] : non-numeric argument to binary operator

任何人都知道怎么解决这个问题?

1 个答案:

答案 0 :(得分:0)

使用Map

Map(function(x,y){
  x["x$x"] * y + x["(Intercept)"]
}, CJAN, JAN.FUT)

这导致带有元素length==length(JAN.FUT)

的向量列表
[[1]]
[1]  3.7419169 -0.1293963  1.7262568  2.2657252  1.8085366

[[2]]
[1]  2.575502  9.046088  2.621364 11.073695  2.749144

数据:

set.seed(42)

CJAN <- list(c("(Intercept)" = 1, "x$x" = 2), c("(Intercept)" = 3, "x$x" = 4))
JAN.FUT <- list(rnorm(5), rnorm(5))