[R] Using loop for a random vector (Montecarlo method)

mlell08 mlell08 at gmail.com
Tue Jan 29 22:31:28 CET 2013


On 29.01.2013 13:10, mary wrote:
> 
> Hi,
> I've understand how to do a permutation matrix but how I can utilize it? 
> I would like to have a sample of 5 unit with rotation parameters! The same
> with 10 unit or 20 unit...

You could rewrite your tab function that is accepts a list with named
entries according to the names of your parameters.

So if you've got a parameter matrix which looks like this:
Matrix m:
 N, n, E, L, a
 0, 0, 0, 0, 0
 0, 0, 0, 0, 1
 0, 0, 0, 0, 2
 0, 0, 0, 1, 0,
...etc.

you first add 1 to each entrey:
m <- m + 1

then, you get a vector of indeices, i.e m[4,] would yield
 1, 1, 1, 2, 1   (remember 1 hst been added to each index)

You can write a function which extracts the parameters from the list

# This assumes you have a parameter list which looks like this:
# l: list(n = c(5, 10, 20),
#         a = c(0.1, 0.2, 0.3),
#         E = c(5,10),
#         L = c(0.01, 0.025, 1))  etc...
#
#
# indVec:c(n= 1, a=1, E=2, L=1)
# The function selects the approproate sub-list by the name
getParam <- function(indexVec,l){
	n <- names(indexVec)    # get parameter names
	ret <- c()        # create list to contain the parameter values
	for (i in 1:length(indVec)){
		para <- l[[ n[i] ]]    # get the right parameter
		# and choose the value specified by indexVec
 		#Append the value to the list to be returned
		ret <- c(ret, para[ indVec[i] ])
	}	
	return(ret)
}

l <- list(n = c(5,10,20), a=c(0.1,0.2,0.3), E=c(5,10),L=c(.01, .025, 1))

r<-t(sapply(1:tl-1,permPar,li=l)) +1

getParam(r[1,],l)
## [1] 5.00 0.10 5.00 0.0

Hope this helps,
Moritz

-- 
GnuPG Key: 0x7340821E



More information about the R-help mailing list