Матричное умножение двух столбцов матрицы в dplyr - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть тиббл с именем to_rotate:

# A tibble: 32 x 3
   personID bun_xyz               mat_y            
      <int> <list>                <list>           
 1        1 <dbl[,3] [1,381 x 3]> <dbl[,3] [3 x 3]>
 2        2 <dbl[,3] [3,714 x 3]> <dbl[,3] [3 x 3]>
 3        3 <dbl[,3] [3,157 x 3]> <dbl[,3] [3 x 3]>
 4        4 <dbl[,3] [3,705 x 3]> <dbl[,3] [3 x 3]>
# ... with 28 more rows

Я хотел бы сделать матричное умножение двух столбцов списка, но как мне это сделать?

Я пробовал это:

to_rotate %>%
    rowwise() %>%
    mutate(rotated = map2(bun_xyz, mat_y, ~ .x %*% .y))

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

Error: Mapped vectors must have consistent lengths:
* `.x` has length 4143
* `.y` has length 9

Если я просто беру одну строку и делаю это "вручную", все в порядке:

> rotated_1 = to_rotate$bun_xyz[[1]] %*% to_rotate$mat_y[[1]]
> head(rotated_1)

          [,1]      [,2]      [,3]
[1,] 0.4411675 0.7639250 0.3506840
[2,] 0.4438372 0.7625611 0.3518184
[3,] 0.4458833 0.7618375 0.3535549
[4,] 0.4452629 0.7607695 0.3538486
[5,] 0.4404777 0.7533813 0.3511128
[6,] 0.4398552 0.7514426 0.3508681

(bun_xyz - это некоторые 3D-координаты, которые необходимо вращать вокруг оси y. mat_y - это матрица, которая может это сделать)

1 Ответ

0 голосов
/ 22 сентября 2019

Удаление rowwise() сделал свое дело:

to_rotate %>%
    mutate(rotated = map2(bun_xyz, mat_y, ~ .x %*% .y))

Спасибо Мосса Нова за то, что указал на это в комментарии.

...