remove_paren {lazy.symbolic} | R Documentation |
Remove redundant parentheses from an expression
Description
Remove redundant parentheses from an expression
Usage
remove_paren(expr, debug = 0)
Arguments
expr |
an expression or a string |
debug |
= 1 to print intermediate result |
Value
a string
Examples
expr="E+(diag(F)%*%(G%*%(H-I+(t(J)-K-L))+(M))+diag(N))"
remove_paren( expr )
## Not run:
set.seed(1701)
nexpr <- 10
for( i in 1:nexpr ){
cat("."); if( i%%100 == 0 ) cat("\n")
# original expression
expr1 <- gen_random_expr( natom=8, nparen=3, nparen2=3
, func=c("t","Diag"), pfunc=.5
, alpha=LETTERS[c(1:3,5:9)], oper=c("%*%","+","-") )
# by remove_paren
expr2 <- remove_paren(expr1)
# by my old Expand
expr3 <- Expand(expr1,all=1)
# by your drop_parens
# expr12 <- safe_deparse( drop_parens(expr1,all=TRUE,in_biop=TRUE) )
expr12 <- deparse( drop_parens(expr1,all=TRUE,in_biop=TRUE) )
printm(expr12,expr2,expr3)
# numerical checking
An <- demomat(2,2)
Bn <- demomat(2,2)+1
Cn <- demomat(2,2)+2
Dn <- demomat(2,2)+3
En <- demomat(2,2)+4
Fn <- demomat(2,2)+5
Gn <- demomat(2,2)+6
Hn <- demomat(2,2)+7
In <- diag(2)
values="A=An; B=Bn; C=Cn; D=Dn; E=En; F=Fn; G=Gn; H=Hn; I=In"
ee1 <- Eval(expr1,values=values, fullsymb=1)
ee2 <- Eval(expr2,values=values, fullsymb=1)
ee12 <- Eval(expr12,values=values, fullsymb=1)
ee3 <- Eval(expr3,values=values, fullsymb=1)
# print only if errors were found.
MAD12 <- max(abs(ee1-ee2))
MAD112 <- max(abs(ee1-ee12))
MAD13 <- max(abs(ee1-ee3))
if( MAD12 > 1e-5 | MAD112 > 1e-5 | MAD13 > 1e-5 ){
printm(expr1,expr12,expr3,MAD12,MAD112,MAD13)
}
}
cat("\n")
## End(Not run)
[Package lazy.symbolic version 1.0.0.20250803 ]