J'ai essayé d'utiliser acast
de reshape2
dans une fonction auto-écrite, mais j'ai eu le problème qu'acast n'a pas trouvé les données que je lui ai envoyées.Comment utiliser acast (reshape2) dans une fonction dans R?
Voici mes données:
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
ressemble alors à ceci:
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
maintenant je peux le jeter en arrière par l'intermédiaire 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
Cependant, lors de la rédaction d'un petit emballage pour acast
qui devrait faire la même chose, je reçois un stupide messages d'erreur:
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
Le problème est évidemment lié à quelque chose comme des environnements et des variables globales/locales. Comme il donne d'autres messages d'erreur après avoir déclaré dat
dans l'environnement global (c'est-à-dire, v1
et v2
pas trouvé tant qu'ils ne sont pas globaux).
Je voudrais utiliser resahpe (en particulier acast) dans une fonction sans avoir à déclarer les variables en dehors de la fonction. Quel est le truc?
Merci.
C'est un problème qui survient plus souvent ces derniers temps. Au départ, je trouvais que c'était un problème avec les méthodes S4, mais apparemment, cela peut aussi se produire avec d'autres fonctions. Ceci est censé être un bug dans R, voir aussi les réponses à cette question: http://stackoverflow.com/questions/3574858/values-not-being-copied-to-the-next-local-environment/ –
Merci Joris. Mais maintenant j'ai l'impression qu'il n'y a pas de solution facile à mon problème. pas trop gentil ... – Henrik
On vient de le découvrir il y en a un en fait. C'est une question de typage correct. –