R将文本字段转换为函数

时间:2013-03-06 23:29:54

标签: r

我想使用字段中的信息并将其包含在R函数中,例如:

data #name of the data.frame with only one raw

"(if(nclusters>0){OptmizationInputs[3,3]*beta[1]}else{0})" # this is the raw

如果我想在函数中使用此信息,我该怎么办?

Another example:
A=c('x^2')
B=function (x) A
B(2)
"x^2"  # this is the return. I would like to have the return something like 2^2=4.

3 个答案:

答案 0 :(得分:2)

使用body<-并解析

A <- 'x^2'

B <- function(x) {}

body(B) <- parse(text = A)

B(3)
## [1] 9

还有更多想法here

答案 1 :(得分:2)

使用plyr的另一个选项:

A <- 'x^2'
library(plyr)
body(B) <- as.quoted(A)[[1]]
> B(5)
[1] 25

答案 2 :(得分:2)

A  <- "x^2"; x <- 2
BB <- function(z){ print( as.expression(do.call("substitute", 
                                            list( parse(text=A)[[1]], list(x=eval(x) ) )))[[1]] ); 
               cat( "is equal to ", eval(parse(text=A)))
              }
 BB(2)
#2^2
#is equal to  4

在R中管理表达式非常奇怪。 substitute拒绝评估其第一个参数,因此您需要使用do.call来允许在替换之前进行评估。此外,表达式的印刷表示隐藏了它们的基本表示。尝试在[[1]]结果后删除相当神秘的(以我的思维方式)as.expression(.)