7
votes

Appliquer une fonction à une matrice de distance dans r

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)


0 commentaires

3 Réponses :


2
votes

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)


0 commentaires

4
votes

Ceci est une version vectorisée de la fonction noeq code> (soit argument i code> ou j code>): xxx pré> Les horaires sont effectués sur un duo de 2,4 GHz Intel Core 2 (Mac OS 10.6.1): P>

> 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


1 commentaires

Bon exemple de la façon dont R peut être rapide: 20x amélioration!



5
votes

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 ifelse code> (c'est une fonction relativement lente) : p> xxx pré>

et minuterie sur mon ordinateur portable: 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 


1 commentaires

Bonjour, il semble que votre lien soit mort, pourriez-vous peut-être résoudre ce problème?