2014-12-30 106 views
1

我想用附加()後,以確定在一塊土地上的數據連接,但我有離開我的功能之前,拆下問題:使用識別和功能

f = function(x, y, data) { 
    attach(data) 
    plot(x, y) 
    ids = identify(x, y) 
    detach(data) 
    return ids 
} 

返回值:

<environment: 0xf785ed8> 
attr(,"name") 
[1] "data" 
> class(i1) 
[1] "environment" 
> str(i1) 
<environment: 0xf785ed8> 
- attr(*, "name")= chr "data" 

如何在函數中使用attach和identify並返回附加對象的id?

+0

不知道這是你的問題的根源,但' return ids'應該是'return(ids)'。 – nrussell

+0

或者只是'ids' .. –

+1

如果你只是完全避免了'attach' /'detach'會怎麼樣? –

回答

2

您正在嘗試在此處進行非標準評估。這總是有點棘手。我可以推薦類似:

f <- function(x, y, data) { 
    dx <- deparse(substitute(x)) 
    dy <- deparse(substitute(y)) 
    plot(reformulate(dx,response=dy),data) 
    ids <- identify(data[,dx], data[,dy]) 
    return(ids) 
} 
f(Population,Income,state.x77) 

f2 <- function(x, y, data) { 
    x <- eval(substitute(x),envir=as.data.frame(data)) 
    y <- eval(substitute(y),envir=as.data.frame(data)) 
    plot(x,y) 
    ids <- identify(x,y) 
    return(ids) 
} 
f2(Population,Income,state.x77) 

你可能想看看Hadley Wickham's notes on non-standard evaluation更多信息...

+0

好的。 R中有許多庫函數將數據框和變量名稱作爲單獨的參數,如lm()。我發現這個函數調用語法更易於使用,並試圖在我的函數中複製相同的約定。 –