2015-10-26 8 views
0

Я пытаюсь применить вычисление к списку из 64 элементов. У меня есть два списка. Первый список называется CJAN, который представляет собой список из 64 линейных моделей, содержащих два числа - целочисленный и коэффициент наклона, как показано ниже. Второй список называется JAN.FUT, который представляет собой список из 64 файлов, содержащих 251 номер, как показано ниже.Умножьте элементы из одного списка с элементами из другого списка

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, а затем добавить коэффициент наклона (х $ х) к полученному расчету. Это мой способ обойти сложность использования функции прогнозирования со списками. Я попытался:

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

, но я получаю сообщение об ошибке:

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

Любой знает, как обойти это?

ответ

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)) 
+0

работает блестяще. Большое спасибо @FlooO –

Смежные вопросы