2013-08-19 115 views
3

有一種方法,以從一個函數將參數傳遞給用with()()將參數傳遞給?喜歡的東西:經由功能

dados <- data.frame(x=1:10, v1=rnorm(10), v2=rnorm(10)) 

with(dados, v1+v2) # Works 

func <- function(data, funcao) { 
with(data, funcao) 
} 

func(dados, v1+v2) # Fails 
func(dados, 'v1+v2') # Fails 

我已經試過eval(),但它也失敗了:/

+0

什麼是你真正想幹什麼? – Thomas

+1

我相信這是可能的。真正的問題是你爲什麼要這樣做。用''來交互使用。 – Roland

+1

你究竟想要做什麼? – Fernando

回答

3

好吧,我想我明白了。你需要調用EVALFUNC然後傳遞一個表達

dados <- data.frame(x=1:10, v1=rnorm(10), v2=rnorm(10)) 

func <- function(data, funcao) { 
    with(data, eval(funcao)) 
} 

func(dados, expression(v1+v2)) 

[1] -0.9950362 1.0934899 -0.9791810 -1.2420633 -1.0930204 0.8941630 -2.3307571 -1.5.2731584 0.2585419 

要使用的字符串:

x = "v1 + v2" 
func(dados, parse(text=x)) 

[1] -0.9950362 1.0934899 -0.9791810 -1.2420633 -1.0930204 0.8941630 -2.3307571 -1.5.2731584 0.2585419 
+0

幾乎在那裏!任何想法如何讓'funcao'成爲一個字符串? 'as.expression()'沒有工作 – Rcoster

+0

OK,可以看到修改。 – Fernando

+0

完美!我只是把函數改成了'func < - function(data,funcao){funcao < - parse(text = funcao);返回(與(數據,eval(funcao)))}''所以我可以直接使用一個字符串。謝謝! – Rcoster