Ошибка искажения символьной матрицы (Рякас) - PullRequest
0 голосов
/ 13 декабря 2018

Я хотел бы выполнить операции с символьными матрицами с Ryacas, используя функцию, которая преобразует базовые R матрицы в формат Ryacas.Результат функции соответствует формату Ryacas.Но когда я пытаюсь умножить матрицы, выдает ошибку

# Error in aa %*% aa : requires numeric/complex matrix/vector arguments

.Приведенный ниже код является минимальным примером, демонстрирующим регистр.

Есть предложения, пожалуйста?

library(Ryacas)

conv.mat <- function(x) {
  conv <- lapply(1:nrow(x), function(i) paste0(x[i, ], collapse = ", "))
  conv <- paste0("List(", paste0("List(", unlist(conv), ")", collapse = ", "), ")")
  noquote(conv)
}

# Writing a matrix manually for Ryacas format

a <- List(List(1, 2), List(3, 7))
a * a
# expression(list(list(7, 16), list(24, 55)))


# Writing a matrix in R and convert it to Ryacas format by the function conv.mat

aa <- matrix(c(1, 2, 3, 7), 2, byrow = TRUE)
aa <- conv.mat(aa)
# [1] List(List(1, 2), List(3, 7))

aa * aa
# Error in aa * aa : non-numeric argument to binary operator

1 Ответ

0 голосов
/ 14 декабря 2018

Во-первых, для умножения Ryacas матриц вы хотите aa * aa вместо aa %*% aa.Но это само по себе не поможет, поскольку conv.mat не дает именно то, что нам нужно (выражение).

Мы можем использовать, например,

conv.mat <- function(x)
  do.call(List, lapply(1:nrow(x), function(r) do.call(List, as.list(x[r, ]))))

Тогда

M <- matrix(c(1, 2, 3, 7), 2, byrow = TRUE)
M %*% M
#      [,1] [,2]
# [1,]    7   16
# [2,]   24   55
M <- conv.mat(M)
M * M
# expression(list(list(7, 16), list(24, 55)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...