Что происходит с функцией apply
ниже?Почему он не дает желаемого результата?Есть ли простой способ получить желаемый результат, используя функцию apply
?
Мне кажется, что мне не хватает чего-то действительно фундаментального в том, как работает функция apply
.Я думаю, что это в основном сводится к следующим строкам в функции apply
.
Строка № 67: else length(ans <- unlist(ans, recursive = FALSE))
Строка № 83: array(ans, c(len.a%/%d2, d.ans))
Но я все еще не совсем понимаю, что происходит.Я знаю, что есть другие, не apply
, способы получения желаемого результата.Но сейчас я просто пытаюсь понять, что происходит с apply
.
ff <- matrix(1:6,ncol=2)
# [,1] [,2]
# [1,] 1 4
# [2,] 2 5
# [3,] 3 6
bb <- matrix(7:10,ncol=2)
# [,1] [,2]
# [1,] 7 9
# [2,] 8 10
# DESIRE:
# 7 36
# 14 45
# 21 54
# 8 40
# 16 50
# 24 60
# This works (but isn't the general solution I'm looking for)
rr1 <- t(t(ff) * bb[1,])
rr2 <- t(t(ff) * bb[2,])
rbind(rr1,rr2)
# [,1] [,2]
# [1,] 7 36
# [2,] 14 45
# [3,] 21 54
# [4,] 8 40
# [5,] 16 50
# [6,] 24 60
# This produces the right numbers but swaps the off-diagonal blocks. Why?
apply(bb, MARGIN=1, function(x,y) t(t(y) * x), y=ff)
# [,1] [,2]
# [1,] 7 8
# [2,] 14 16
# [3,] 21 24
# [4,] 36 40
# [5,] 45 50
# [6,] 54 60
# Other formulations like these don't make a difference
apply(bb, MARGIN=2, function(x,y) t(t(y) * as.vector(t(x))), y=ff)
apply(bb, MARGIN=2, function(x) t(t(ff) * x))