[R] Newbie: Simple loops: complex troubles
Petr Klasterecky
klaster at karlin.mff.cuni.cz
Wed Apr 4 07:53:25 CEST 2007
Not sure whether this is exactly and everything you want, but at least
it may give you some ideas how to proceed. You do not need loops at all:
Let's try a simplified example with 3 samples, each of length 10 (just
for printing purposes):
m <- c(1,2,3)
v <- c(1,4,9)
n <- 10
means <- rep(m,each=n)
vars <- rep(v,each=n)
means
[1] 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3
vars
[1] 1 1 1 1 1 1 1 1 1 1 4 4 4 4 4 4 4 4 4 4 9 9 9 9 9 9 9 9 9 9
numbers <- matrix(rnorm(length(means), mean=means, sd=sqrt(vars)),
nrow=n, byrow=F)
numbers
[,1] [,2] [,3]
[1,] 0.9721407 0.4510903 -2.880967
[2,] -0.4834124 -2.7958993 -1.368037
[3,] 1.6871736 -0.6717009 -3.268698
[4,] 0.9738312 3.1919293 3.982135
[5,] 0.8032162 1.0397078 7.227974
[6,] -0.1606657 2.6339503 5.873210
[7,] 0.5786295 -0.3589869 4.194425
[8,] 0.9909184 2.0622899 6.432129
[9,] 3.1687842 1.9765014 3.788201
[10,] 1.4814704 3.3024049 4.194628
colnames(numbers) <- paste('Ux',1:length(m),sep='')
numbers
Ux1 Ux2 Ux3
[1,] 0.9721407 0.4510903 -2.880967
[2,] -0.4834124 -2.7958993 -1.368037
[3,] 1.6871736 -0.6717009 -3.268698
[4,] 0.9738312 3.1919293 3.982135
[5,] 0.8032162 1.0397078 7.227974
[6,] -0.1606657 2.6339503 5.873210
[7,] 0.5786295 -0.3589869 4.194425
[8,] 0.9909184 2.0622899 6.432129
[9,] 3.1687842 1.9765014 3.788201
[10,] 1.4814704 3.3024049 4.194628
Now your random vectors are in columns of 'numbers' and you can work
with them using indexing.
Petr
projection83 napsal(a):
> I am used to java (well, i dont remember it really well, but anyway)
>
> I have having a really difficult time making simple loops to work. I got the
> following to work:
>
> ##
> ##Creates objects Ux1, Ux2, Ux2 etc. that all contain n numbers in a
> random distribution
> ##
> m<-c(m1,m2,m3,m4,m5,m6,m7,m8,m9,m10)#these are defined as numbers (means)
> v<-c(v1,v2,v3,v4,v5,v6,v7,v8,v9,v10)#these are defined as numbers
> (variances)
> n<-50
> for(k in 1:g)
> {
> assign( paste("Ux", k, sep=""), rnorm( n ,
> assign(paste("m",1,sep=""),m[k]) , assign(paste("m",1,sep=""),v[k]) )
> )
> }
>
>
> The above seems like a lot of work for such a simple feat, no?
>
> Also, I CANNot get the following to work in a loop manor:
>
> Ux1i<-as.integer(Ux1)
> Ux2i<-as.integer(Ux2)
> Ux3i<-as.integer(Ux3)
>
> or
>
> Sx1<-sort(Ux1i)
> Sx2<-sort(Ux2i)
> Sx3<-sort(Ux3i)
>
> Maybe I am just not using matrixes enough? but even that seems quite a lot
> more complex than calling x<-matrix() then grabbing values by
> x[j][k]...(java style if i remember correctly). the matrix help in R dosnt
> make much sense to me. And also i am not sure why numeric() dosnt make you
> define length before you use it, yet matrix() does. Is there some other
> funciton that i should be using to make length not an issue?
>
>
> All in all, I dont know if i am going about this loop stuff a reaaaaly round
> about way - Any help would make me much less loopy:Pthanks
>
>
>
--
Petr Klasterecky
Dept. of Probability and Statistics
Charles University in Prague
Czech Republic
More information about the R-help
mailing list