simplifytext(str) [1]-6ren">
gpt4 book ai didi

string - R 从公式字符串或表达式中删除多余的括号

转载 作者:行者123 更新时间:2023-12-04 14:14:21 25 4
gpt4 key购买 nike

我有很多与此类似的公式字符串:

str <- "( ((  A  ) *  J ) - ((  J  ) *  G  ) ) /  Z "

有很多括号不需要在那里, (A*J - J*G)/Z足够了。 R 中有一个函数或包可以解决这个问题吗?

我尝试了 R 表达式的函数以及 as.formula但没有找到我需要的东西。

最佳答案

我们可以使用 R 解析器来完成这项工作。诀窍是 R 知道何时需要基于解析树的括号,所以我们可以简单地从树中删除它们:

看到这个:

simplify <- function(e)
{
if( mode(e) %in% c("name","numeric") ) return(e)

op <- as.character(e[[1]])

if( op == "(" ) return(simplify(e[[2]]))

if( op %in% c("+","-","*","/","^") ) return(call(op, simplify(e[[2]]), simplify(e[[3]])))
}

simplifytext <- function(s) deparse(simplify(parse(text=s)[[1]]))

输入:
str <- "( ((  A  ) *  J ) - ((  J  ) *  G  ) ) /  Z "
str2 <- gsub("-", "/", gsub("*", "+", str, fixed=TRUE))

结果:
> str2
[1] "( (( A ) + J ) / (( J ) + G ) ) / Z "

> simplifytext(str)
[1] "(A * J - J * G)/Z"
> simplifytext(str2)
[1] "(A + J)/(J + G)/Z"

关于string - R 从公式字符串或表达式中删除多余的括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17240770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com