eval()
周围的R似乎有很多功能(至少比我以前更多)。有没有办法测试字符串(str
)是否会评估函数?
寻找以下功能,
R> is.strFun("boo(x)")
TRUE
R> is.strFun("boo")
FALSE
R> is.strFun("boo(baz(Y))")
TRUE
我宁愿不使用eval(parse(text=str))
因为我目前正在使用它而且它变得非常混乱,因为"boo(x)"
可能str
在boo(x)
内}。
我想做的事情:我想让R函数成为另一种语言的包装器。但是,而不是通常的eval2other('set x=2;set y=x*x')
(这是other
语言中的字符串被评估为other
),我宁愿该函数具有与R类似的样式。我有大部分解析完成了,但我遇到像"boo(boo(Y))"
之类的问题。我有一个解决方案,但它非常多毛,很难调试(即使使用像debug
这样的软件包)。
答案 0 :(得分:2)
这是另一种适用于前缀调用的方式,但不适用于中缀调用,例如%in%
。
is.prefix.call <- function(text) {
d <- getParseData(parse(text=text))
with(d, token[id == 1] == 'SYMBOL_FUNCTION_CALL')
}
is.prefix.call("boo(x)")
# TRUE
is.prefix.call("boo")
# FALSE
is.prefix.call("boo(baz(Y))")
# TRUE
答案 1 :(得分:1)
这远非完美,但它很短,也许它足够好了:
isFunCall <- function(x) grepl("[()]", x) & grepl("^[()[:alnum:]_.]+$", x)
isFunCall("a(b)")
## [1] TRUE
isFunCall("a(b(c))")
## [1] TRUE
isFunCall("d")
## [1] FALSE