[R] ugly loop
Woodrow Setzer
wsetzer at mindspring.com
Fri Apr 22 15:44:23 CEST 2005
Almost there; you need the transpose of v, since Bill originally had columns changing faster:
e.g.
x <- pt$x[t(ver)]
-----Original Message-----
From: Marc Schwartz <MSchwartz at medanalytics.com>
Sent: Apr 22, 2005 9:17 AM
To: Bill Simpson <William.Simpson at drdc-rddc.gc.ca>
Cc: R-Help <r-help at stat.math.ethz.ch>
Subject: Re: [R] ugly loop
On Fri, 2005-04-22 at 08:58 -0400, Bill Simpson wrote:
> The following code is slow and ugly:
>
> count<-0
> for(i in 1:nrow(ver))
> for(j in 1:ncol(ver))
> {
> count<-count+1
> x[count]<-pt$x[ver[i,j]]
> y[count]<-pt$y[ver[i,j]]
> z[count]<-pt$z[ver[i,j]]
> }
>
> Please help me make it better.
>
> Thanks!
The following should work:
> ver <- matrix(sample(1:16, 16), ncol = 4)
> pt <- data.frame(x = sample(1:16, 16),
+ y = sample(1:16, 16),
+ z = sample(1:16, 16))
> ver
[,1] [,2] [,3] [,4]
[1,] 8 9 5 13
[2,] 14 16 1 10
[3,] 12 2 11 7
[4,] 6 3 4 15
> pt
x y z
1 6 15 15
2 9 2 3
3 11 1 5
4 14 4 10
5 13 7 14
6 1 14 7
7 15 10 4
8 10 5 12
9 4 12 2
10 8 8 13
11 16 11 1
12 7 13 9
13 2 16 11
14 3 9 16
15 5 6 8
16 12 3 6
> x <- pt$x[ver]
> y <- pt$y[ver]
> z <- pt$z[ver]
> x
[1] 10 3 7 1 4 12 9 11 13 6 16 14 2 8 15 5
> y
[1] 5 9 13 14 12 3 2 1 7 15 11 4 16 8 10 6
> z
[1] 12 16 9 7 2 6 3 5 14 15 1 10 11 13 4 8
Keep in mind that a matrix is a vector with dims, so you can fill a
vector from the matrix simply by doing the indexing with a single value,
which will do the fill indexed column by column.
HTH,
Marc Schwartz
______________________________________________
R-help at stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
More information about the R-help
mailing list