使用数据框R

时间:2016-05-12 18:01:35

标签: r string dataframe

假设我有一个包含4个变量(A,B,C,D)的DB,有2行:

A B C D  
1 1 2 3  
1 1 4 5

我想做一个先验未知的数学运算,例如:

my_string <- "A x B - C x D"

在我的数据库中,前两个数字(A,B)是算法中的校准参数,C和D是数据。我需要做很多次告诉字符串的操作,以及未知的时间直到收敛。

由于我读过的内容,我认为这可以通过使用Call函数来完成。例如,我有一个功能:

my_function <- function(string, data){  

  #do what I have to do  
return(something)  
}

我应该重复my_function,直到找到适合的A和B.

如果“指令”由字符串给出,我怎么能这样做?

PS:参数和数据显示在同一个数据框中,如果有助于更快地解决问题,它们可能位于两个不同的数据库中,我没有遇到任何麻烦。

2 个答案:

答案 0 :(得分:2)

eval(parse(text="2+3"))会产生5,这就是你要找的东西吗?

它也适用于变量

d <- 4
eval(parse(text="d+3"))

将产生7

更新

这样的事情?

d <- data.frame(a = 11:20, b = 1:10)

f <- function(cmd, data) {
    with(data, eval(parse(text=cmd)))
}

q <- f(cmd="2*a-3*b", d)
print(q)

产生

[1] 19 18 17 16 15 14 13 12 11 10

答案 1 :(得分:2)

更好的方法是使用eval(substitute()而不是eval(parse(text = ...))

d <- data.frame(a = 11:20, b = 1:10)

f1 <- function(cmd,data){
    eval(substitute(cmd),data,parent.frame())
}

> f1(a+b,d)
 [1] 12 14 16 18 20 22 24 26 28 30
> f1(2*a-b,d)
 [1] 21 22 23 24 25 26 27 28 29 30