给定一个 R 表达式,该表达式表示项的总和,例如
<代码>表达式
我想以名称或表达式列表的形式检索sum的所有项的集合。因此,在本例中,元素将是:< code>a、< code>b * c、< code>d和< code>e * f。
以下内容来自评论。
tems本身可以包含一个运算符,如
expression(a + b * c + d + e * (f + g))
所以我们需要对R语言有所了解。
是否有一个简单的方法进行,例如,使用pryr包的call_tree
?
尝试递归解析表达式:
getTerms <- function(e, x = list()) {
if (is.symbol(e)) c(e, x)
else if (identical(e[[1]], as.name("+"))) Recall(e[[2]], c(e[[3]], x))
else c(e, x)
}
expr <- expression(a + b * c + d + e * (f + g))
getTerms(expr[[1]])
给:
[[1]]
a
[[2]]
b * c
[[3]]
d
[[4]]
e * (f + g)
您可以使用递归函数对解析树进行爬网:
foo <- function(x) {
if (is.call(x)) y <- as.list(x) else return(x)
#stop crawling if not a call to `+`
if (y[[1]] != quote(`+`)) return(x)
y <- lapply(y, foo)
return(y[-1]) #omit `+` symbol
}
expr1 <- expression(a + b * c + d + e * f)
unlist(foo(expr1[[1]]))
#[[1]]
#a
#
#[[2]]
#b * c
#
#[[3]]
#d
#
#[[4]]
#e * f
expr2 <- expression(a + b * c + d + e * (f + g))
unlist(foo(expr2[[1]]))
#[[1]]
#a
#
#[[2]]
#b * c
#
#[[3]]
#d
#
#[[4]]
#e * (f + g)
问题内容: 我正在尝试编写一个正则表达式来检查给定的字符串是否像a + b,2 + a + b,3 + 6 * 9 + 6 * 5 + a * b等… 仅+和*运算符。 我试过了 不幸的是,它仅处理3 * 7 …(数字*数字)之类的情况。 等待您的答案,感谢您的阅读。 问题答案: 把和字符类中。 演示
了解ANTLR最好的方法就是实例。构建一个简单的计算器是个不错的主意。为了使它容易理解且保持简单,我们将只允许基本的算术运算符(加、减、乘、除)、括号表达式、整数和变量。 grammar Calc; prog : stat+ ; stat : expr | ID '=' expr ; expr : expr ('*'|'/') expr
问题内容: 有没有办法让AngularJS在模型数据中评估表达式? HTML: 模型: 最终结果将是:。 问题答案: 您可以使用该服务来插值字符串… JSFiddle
我有一些词语包含在一些文章中。Rnw文件。以下段落包含两个sweave表达式。用什么正则表达式可以找到每个表达式中的R代码?所以正则表达式应该能够找到< code>mean(mtcars$mpg)和/或< code>summary(lm(mpg ~ hp drat,mtcars)) Lorem ipsum Dolor sat amet,consecur adi的elit,se do eiusmod
问题内容: 我需要在Javascript中评估用户输入的算术表达式,例如“ 2 *(3 + 4)”,但出于安全原因,我不想使用它。 我可以去除所有不是数字或运算符的字符,但是我不确定这是否安全,如果用户可以使用,,等功能,那会很好。 是否有进行算术表达式评估的Javascript库? 问题答案: 您可以尝试使用JavaScript Expression Evaluator: 该库是Raphael
问题内容: 我发现这个潜在的非常有用的python脚本,但是遇到了我从未见过的这些表达式: 我找不到搜索方法。怎么办? 谢谢你的帮助! 问题答案: 该修改导致字符串字符串被解释 字面 。这意味着,将求值为-而不导致反斜杠转义字符。先验等效于字符串,但没有raw修饰符。 注意:字符串 不能 以奇数个反斜杠结尾,即不是正确的字符串。