2010-12-10 12 views
3

Maintenant, je suis en train de faire de cette façon:Comment redimensionner une matrice de points?

d = approx(density(csvdata[,'X'],n=5000),xout=csvdata[,'X']) 
dfact = 40/max(d$y) 
for(i in 1:nrow(csvdata)) { 
    d$y[i] = (d$y[i]*dfact)-20 
} 

Ce que je fais ici est fonction de densité redimensionnant qui toujours être supérieure à 0 à afficher sous de bas de mon tableau qui est à -20 et toujours Ajuster au top qui est sur +20, donc je suis plus facile de détecter les irrégularités dans la ligne. Maintenant, comme vous pouvez le voir, je fais cela en boucle, mais peut-être y a-t-il des builds dans un liners?

Répondre

3

y est un vecteur, et * et - sont des fonctions vectorisées, de sorte que vous n'avez pas besoin de boucler sur le vecteur de nombres faisant les calculs un à la fois. Il suffit de les faire tout à la fois:

d$y <- (d$y * dfact) - 20 

ou mieux (pas d$),

d <- within(d, y <- (y * dfact) - 20) 

dfact est un scalaire (une longueur de 1 vecteur dans R car il ne dispose pas d'une notion distincte scalaire), mais R va étendre dfact (recycle est la terminologie correcte dans R) à la longueur requise pour permettre aux calculs ci-dessus de procéder comme d'habitude.

Questions connexes