2014-12-30 177 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()。我发现这个函数调用语法更易于使用,并试图在我的函数中复制相同的约定。 –