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 ]