Wie zu verwenden acast (reshape2) innerhalb einer Funktion in R?

Habe ich versucht zu verwenden acast aus reshape2 in einer selbst geschriebenen Funktion, hatte aber das problem, dass acast nicht zu finden die Daten, die ich senden, um es.

Hier meine Daten:

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 sieht dann wie folgt aus:

  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

nun kann ich warf es wieder über 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

Jedoch beim schreiben einen kleinen wrapper für acast sollten das gleiche tun, bekomme ich eine dumme Fehlermeldungen:

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

Das problem ist offensichtlich im Zusammenhang zu etwas, was Umgebungen und globalen/lokalen Variablen. Wie es gibt andere Fehlermeldungen nach dem deklarieren dat im globalen Umfeld (d.h., v1 und v2 nicht gefunden, solange Sie nicht global).

Möchte ich nutzen, resahpe (vor allem acast), innerhalb einer Funktion, ohne die Notwendigkeit zu deklarieren, die Variablen außerhalb der Funktion. Was ist der trick?

Dank.

  • Dies ist ein problem, das tritt häufiger auf in letzter Zeit. Ich hatte ursprünglich gefunden, dass es ein problem mit dem S4-Verfahren, aber anscheinend kann auftreten, mit anderen Funktionen zu. Dies ist vermutlich ein bug in R, siehe auch die Antworten auf diese Frage : stackoverflow.com/questions/3574858/...
  • Dank Joris. Aber jetzt bekomme ich den Eindruck, dass es keine einfache Lösung für mein problem. nicht zu schön...
  • Gerade herausgefunden, dass es ist eine eigentlich. Es ist eine Frage der richtigen Typisierung.
InformationsquelleAutor Henrik | 2010-09-22
Schreibe einen Kommentar