Как использовать acast (reshape2) в функции в R?

Я пытался использовать acast из reshape2 внутри самописной функции, но возникла проблема, заключающаяся в том, что acast не нашел данные, которые я ему отправляю.

Вот мои данные:

library("reshape2")
x <- data.frame(1:3, rnorm(3), rnorm(3), rnorm(3))    
colnames(x) <- c("id", "var1", "var2", "var3")
y <-melt(x, id = "id", measure = c("var1", "var2", "var3"))

y тогда выглядят так:

  id variable      value
1  1     var1  0.1560812
2  2     var1  1.0343844
3  3     var1 -1.4157728
4  1     var2  0.8808935
5  2     var2  0.1719239
6  3     var2  0.6723758
7  1     var3 -0.7589631
8  2     var3  1.1325995
9  3     var3 -1.5744876

теперь я могу верните его через acast :

> acast(y,y[,1] ~ y[,2])
        var1      var2       var3
1  0.1560812 0.8808935 -0.7589631
2  1.0343844 0.1719239  1.1325995
3 -1.4157728 0.6723758 -1.5744876

Однако при написании небольшой оболочки для acast , которая должна делать то же самое, я получаю глупые сообщения об ошибке:

wrap.acast <- function(dat, v1 = 1, v2 = 2) {
    out <- acast(dat, dat[,v1] ~ dat[,v2])
    return(out)
}

wrap.acast(y)

Error in eval(expr, envir, enclos) : object 'dat' not found

Проблема, очевидно, в связаны с чем-то вроде сред и глобальных / локальных переменных. Поскольку он дает другие сообщения об ошибках после объявления dat в глобальной среде (т. е. v1 и v2 не найдены пока они не являются глобальными).

Я хотел бы использовать resahpe (особенно acast) внутри функции без необходимости объявления переменных вне функции. В чем трюк?

Спасибо.

7
задан Henrik 22 September 2010 в 12:36
поделиться