Cette question est venue aujourd'hui dans la liste de diffusion de Manipulatr.
library(plyr) N <- 100 a <- data.frame(b=1:N,c=runif(N)) d <- dist(a,diag=T,upper=T) sumd <- adply(as.matrix(d),1,sum)
3 Réponses :
Ma solution consiste à obtenir les index du vecteur de distance, à une rangée et à la taille de la matrice. J'ai eu ceci depuis CodeGuru
sumd2 <- getsum(d)
Ceci est une version vectorisée de la fonction noeq code> (soit argument i code> ou j code>): > N <- 1000
> system.time(sapply(1:N, function(j) noeq.1(1:N, j, N)))
user system elapsed
0.676 0.061 0.738
> system.time(sapply(1:N, function(i) sapply(1:N, function(j) noeq(i, j, N))))
user system elapsed
14.359 0.032 14.410
Bon exemple de la façon dont R peut être rapide: 20x amélioration!
Tout d'abord, pour quiconque n'a pas encore vu cela, je recommande fortement lire cet article sur le R-wiki b> À propos de l'optimisation du code.
Voici une autre version sans utiliser et minuterie sur mon ordinateur portable: p> ifelse code> (c'est une fonction relativement lente) : p> > system.time(do.call("rbind",lapply(1:N, function(j) noeq.2(1:N, j, N))))
user system elapsed
0.67 0.00 0.67
Bonjour, il semble que votre lien soit mort, pourriez-vous peut-être résoudre ce problème?