decompose_MatProd {lazy.symbolic}R Documentation

Decompose Matrix Product

Description

Decompose a product of matrices into factors

元のdecomposed_MatProdはdeprecate予定

Usage

decompose_MatProd(
  expr,
  op = "+",
  return_op = FALSE,
  flat = FALSE,
  target_X = NULL
)

decompose_MatProd(
  expr,
  op = "+",
  return_op = FALSE,
  flat = FALSE,
  target_X = NULL
)

Arguments

expr

an expression or a string

op

???

return_op

???

flat

???

target_X

???

Details

Currently, nested expressions may not be handled correctly in some cases, so caution is advised.

Value

a list of terms/factors and, if requested, a vector of operators

Examples


modify_math_operators()
# example code
decompose_MatProd("A%*%B%*%C%*%D%*%E", "%*%")
decompose_MatProd("A%*%B%*%C%*%D%*%E", "*")

decompose_MatProd("a+b-c+d+e", c("+"), return_op = TRUE)
decompose_MatProd("a+b-c+d+e", c("+"), return_op = TRUE)
decompose_MatProd("a+b-c+d+e", c("-", "+"), return_op = TRUE)

decompose_MatProd("a+b-(c+d)+e", c("-", "+"), return_op =  TRUE)
decompose_MatProd("a+b-(c+d)+e", c("+"), return_op =  TRUE)

decompose_MatProd("a+b--e", c("+"),  return_op =  TRUE)
decompose_MatProd("a+b-+e", c("-", "+"),  return_op =  TRUE)
decompose_MatProd("+a++b-+-c+-d-+e", c("-", "+"),  return_op =  TRUE)

decompose_MatProd("A%*%B%*%((X%*%C)%*%D)", "%*%", flat = TRUE)
decompose_MatProd("A*B*((X%*%C)*D)", "%*%", flat = TRUE)
decompose_MatProd("A*B*((X*C)*D)", "*", flat = TRUE)

drop_parens("A*B*((X*C)*D)") |> decompose_MatProd("*", flat = TRUE)

decompose_MatProd("A+B-((X+C)+D)-E", c("+", "-"), flat = TRUE, return_op = TRUE)
decompose_MatProd("A+B-((X+C)+D)-E", c("+"), flat = TRUE, return_op = TRUE)
decompose_MatProd("A+B-((X+C)+D)-E", c("+"), flat = FALSE, return_op = TRUE)

decompose_MatProd("A+(B+C)+(X+D)", "+", target_X = "X")
decompose_MatProd("A+(B+C)+((X+D)+E)", "+", target_X = "X")

decompose_MatProd("A+B-((X+C)+D)-E", c("+", "-"), flat = TRUE, return_op = TRUE)
decompose_MatProd("A+B-((X+C)+D)-E", c("+"), flat = TRUE, return_op = TRUE)
decompose_MatProd("A+B-((X+C)+D)-E", c("+"), flat = FALSE, return_op = TRUE)

decompose_MatProd("A+(B+C)+(X+D)", "+", target_X = "X")
decompose_MatProd("A+(B+C)+((X+D)+E)", "+", target_X = "X")
decompose_MatProd("A+(B+C)+((X+D)+(E+F))", "+", target_X = "X")

decompose_MatProd("(A%*%X)%*%B", "%*%")
decompose_MatProd("(A%*%X)%*%B", "%*%", flat = TRUE)
decompose_MatProd("A%*%((X%*%B))", "%*%", flat = TRUE)
decompose_MatProd("A%*%(((((X))%*%B)))", "%*%", flat = TRUE)


# flatの修正
decompose_MatProd("X-(A+B)", c("+", "-"), flat = TRUE, return_op=TRUE)
decompose_MatProd("X-(A+B)", c("+"), flat = TRUE, return_op=TRUE)

# example code

## Not run: 
testthat::expect_equal(
decompose_MatProd("A+(B+C)+((X+D)+(E+F))", "+", target_X = "X")  |>
 sapply(safe_deparse), c("A", "(B+C)", "X", "D", "(E+F)")
 )

## End(Not run)


[Package lazy.symbolic version 1.0.0.20250803 ]