I would still think you should look at lists.  For example, your ranges
could be specified with:

> ranges <- list(list(c(1.05, 1.3), c(1.3,    .65), c(1.65, 1.99)),
+                list(c(2.05, 2.3), c(2.3, 2.65), c(2.65, 2.99)))
>
> ranges
[[1]]
[[1]][[1]]
[1] 1.05 1.30
[[1]][[2]]
[1] 1.30 0.65
[[1]][[3]]
[1] 1.65 1.99

[[2]]
[[2]][[1]]
[1] 2.05 2.30
[[2]][[2]]
[1] 2.30 2.65
[[2]][[3]]
[1] 2.65 2.99


And you can reference each on with indices from a loop.

If you are really set on creating a lot of objects, then the following loop
might do it for you:

for (i in 1:length(newrate)){
    for (j in names(newrate[[i]])){
        assign(paste('rate', i, '_', j, sep=''), newrate[[i]][j])
    }
}



On Mon, Dec 28, 2009 at 8:31 AM, Maithili Shiva <maithili_sh...@yahoo.com>wrote:

>   Dear Sir,
>
> Thanks a lot for your guidance. Definitely I will go through lists. The no
> of variables for any given rate say rate1 are three different ranges.
>
> e.g. rate1 has three ranges
>
> Range1  = (1.05 - 1.30)         Range2  = (1.30 - 1.65)      Range3 = (1.65
> - 1.99)
>
> Likewise rate2 has three ranges
>
> Range1 =  (2.05 - 2.30)        Range3 = (2.30 - 2.65)        Range3 = (2.65
> - 2.99)
>
> etc.
>
> (Sir, in the end I need to generate some no of random numbers from varios
> combinations of these two rates. Effectively there are 3^2 = 9 range
> combinations and I have already done it.)
>
>
> Sir individually I was able to read newrate[[1]]$min1 etc. but my problem
> is construction of loop. I am not able to construct a loop though I tried
> varios options. But I get something like no of items mismatch something.
> (Unfortunately R is not installed on this machine as it doesn't belong to me
> so i can't give exact error message)
>
>
> Sir, I need to write the loop for following (Loop is required as I don't
> know how many rates I will be dealiong with as an input.)
>
>
> rate1_min1  = rates1$min1
> rate1_max1 = rates1$max1
> rate1_min2  = rates1$min2
> rate1_max2 = rates1$max2
> rate1_min3  = rates1$min3
> rate1_max3 = rates1$max3
>
> rate2_min1  = rates2$min1
> rate2_max1 = rates2$max1
> rate2_min2  = rates2$min2
> rate2_max2 = rates2$max2
> rate2_min3  = rates2$min3
> rate2_max3 = rates2$max3
>
> Sir, please advise.
>
> Regards
>
> Maithili
>
>
>
>
>
> --- On *Mon, 28/12/09, jim holtman <jholt...@gmail.com>* wrote:
>
>
> From: jim holtman <jholt...@gmail.com>
> Subject: Re: [R] Modified R Code
> To: "Maithili Shiva" <maithili_sh...@yahoo.com>
> Cc: r-help@r-project.org
> Date: Monday, 28 December, 2009, 1:11 PM
>
>
>  For your problem A, why do you want to create so many variables?  Leave
> the data in the 'newrate' list and reference the information from there.  It
> will be much easier.  Think about the data structures that you want to work
> with, especially if you have a variable number of objects/files that you are
> going to be processing.  It is not entirely clear what you are trying to do,
> but from the basic structure it does appear that with the right data
> structure you can do what you want without having to 'replicate' a lot of
> code.  For example, if you can easily reference the items in 'newrate' as
> the following:
>
> newrate[[1]]$min1
> newrate[[2]]$max3    # and so on
>
> This can be done in a loop and it appears that most of Problem B can be
> handled by common code.  You probably need to read a little more about
> 'lists' because they are your friend in these kind of situations.
>
> On Sun, Dec 27, 2009 at 10:55 PM, Maithili Shiva 
> <maithili_sh...@yahoo.com<http://mc/compose?to=maithili_sh...@yahoo.com>
> > wrote:
>
>>
>> Dear R helpers,
>>
>> I have following input files. (Actually they are more than 10 rates but
>> here i am considering only 2 rates to write my problem)
>>
>> rate1.csv
>> min1        max1            min2          max2          min3
>> max3
>> 1.05        1.30               1.30
>> 1.65             1.65          1.99
>>
>> rate2.csv
>> min1        max1            min2          max2          min3
>> max3
>> 2.05        2.30               2.30
>> 2.65             2.65          2.99
>>
>>
>> The simple R code I had used to read these files was as given below -
>>
>> # OLD CODE
>>
>> rates1 = read.csv('rate1.csv)
>> rates2 = read.csv('rate2.csv')
>>
>> rate1_min1  = rates1$min1
>> rate1_max1 = rates1$max1
>> rate1_min2  = rates1$min2
>> rate1_max2 = rates1$max2
>> rate1_min3  = rates1$min3
>> rate1_max3 = rates1$max3
>>
>> rate2_min1  = rates2$min1
>> rate2_max1 = rates2$max1
>> rate2_min2  = rates2$min2
>> rate2_max2 = rates2$max2
>> rate2_min3  = rates2$min3
>> rate2_max3 = rates2$max3
>>
>>
>> Since I am not aware how many rates I will be dealing with (it can be 2,
>> 4, or 10), hence I can't hardcode my input like I had defined above.
>>
>> So with the guidance of R - help, I had rerwitten the input code as given
>> below.
>>
>> # NEW CODE
>>
>> n = 2  # It gives me no of rates
>>
>> X = paste('rate', 1:n, '.csv', sep = ' ' )
>>
>> # the output is "rate1.csv"  " rate2.csv"
>>
>> newrate = lapply(X, read.csv)
>>
>> # the output is as given below
>>
>> newrate
>>
>> [ [1] ]
>>         min1         max1        min2      max2     min3       max3
>> 1       1.05        1.30          1.30        1.65       1.65        1.99
>>
>> [ [2] ]
>>         min1         max1        min2      max2     min3       max3
>> 1       2.05        2.30          2.30        2.65       2.65        2.99
>>
>> ## _________________________________________________
>>
>> ## PROBLEM
>>
>> # PROBLEM - A
>>
>> If I apply the command (As given in OLD CODE above)
>>
>> rate1_min1  = rates1$min1
>> # The output which I get is
>>     min1
>> 1  1.05
>>
>> On similar lines I define
>>
>> rate1_min1 = newrate[[1]] [1]
>> # The output which I get is
>>     min1
>> 1  1.05
>>
>> rate1_max1 = newrate[[1]] [2]
>>
>> will give me output
>>
>>     max1
>> 1  1.30
>>
>> and so on.
>>
>> So I will have to define it 12 times to assign the respective min and max
>> values.
>>
>> My problem is instead of hard coding like I have done in OLD CODE, I need
>> to assign these respective input values using a loop or some other way (as
>> it becomes cumbersome if no of rates exceed say 10 and also since I am not
>> aware how many rate files i will be dealing with) so that in the end I
>> should be able to assign (say) the values like
>>
>> rate1_min1  = 1.05
>> rate1_max1 = 1.30
>> rate1_min2  = 1.30
>> rate1_max2 = 1.65
>> rate1_min3  = 1.65
>> rate1_max3 = 1.99
>>
>> rate2_min1  = 2.05
>> rate2_max1 = 2.30
>> rate2_min2  = 2.30
>> rate2_max2 = 2.65
>> rate2_min3  = 2.65
>> rate2_max3 = 2.99
>>
>> If there are say 10 rates, then this will continue till
>>
>> rate10_min1 =  ......
>> rate10_max1 = ......
>> .........
>> so on.
>>
>> ## ________________________________________________________
>>
>> # PROBLEM - B
>>
>> # Suppose Rij = ith Rate and jth range. (There are 3 ranges i.e. j= 3).
>>
>> data_label = expand.grid(c("R11", "R12", "R13"), c("R21", "R23", "R23"))
>>
>> # gives the output like
>>
>>   data_label
>>      Var1        Var2
>> 1    R11         R21
>> 2    R12         R21
>> 3    R13         R21
>> 4    R11         R22
>> 5    R12         R22
>> 6    R13         R22
>> 7    R11         R23
>> 8    R12         R23
>> 9    R13         R23
>>
>>
>> If instead of two rates, suppose there are three rates, I will have to
>> modify my code as
>>
>> data_label = expand.grid(c("R11", "R12", "R13"), c("R21", "R23", "R23"),
>> c("R31", "R32", "R33"))
>>
>> If I define say
>>
>> n = no_of_rates  # I will be taking this figure from some otehr csv file.
>>
>> My PROBLEM = B is how do I write the above code pertaining to data_label
>> in terms of 'n'.
>>
>> ## _______________________________________________________________________
>>
>> I understand I am giving the impression as I need some kind of spoon
>> feeding. I am giving below the original complete OLD CODE (consisting of 4
>> rates) I had written in the beginning. Problem with me is to modify it for
>> varaible number of rates.
>>
>> I sincerely apologize for the inconvenience I have caused so far by asking
>> queries. Please guide me.
>>
>> Regards
>>
>> Maithili
>>
>> # ____________________________________________
>>
>> MY ORIGINAL CODE (Actual HARD CODE)
>>
>> ## ONS - PPA
>>
>> # INPUT
>>
>> rate_1   = read.csv('rate1_range.csv')
>> rate_2   = read.csv('rate2_range.csv')
>> rate_3   = read.csv('rate3_range.csv')
>> rate_4   = read.csv('rate4_range.csv')
>>
>> prob_1   = read.csv('rate1_probs.csv')
>> prob_2   = read.csv('rate2_probs.csv')
>> prob_3   = read.csv('rate3_probs.csv')
>> prob_4   = read.csv('rate4_probs.csv')
>>
>> rate1_min_1   =  rate_1$rate1_range1_min
>> rate1_max_1  =  rate_1$rate1_range1_max
>> rate1_min_2   =  rate_1$rate1_range2_min
>> rate1_max_2  =  rate_1$rate1_range2_max
>> rate1_min_3   =  rate_1$rate1_range3_min
>> rate1_max_3  =  rate_1$rate1_range3_max
>>
>> rate2_min_1   =  rate_2$rate2_range1_min
>> rate2_max_1  =  rate_2$rate2_range1_max
>> rate2_min_2   =  rate_2$rate2_range2_min
>> rate2_max_2  =  rate_2$rate2_range2_max
>> rate2_min_3   =  rate_2$rate2_range3_min
>> rate2_max_3  =  rate_2$rate2_range3_max
>>
>> rate3_min_1   =  rate_3$rate3_range1_min
>> rate3_max_1  =  rate_3$rate3_range1_max
>> rate3_min_2   =  rate_3$rate3_range2_min
>> rate3_max_2  =  rate_3$rate3_range2_max
>> rate3_min_3   =  rate_3$rate3_range3_min
>> rate3_max_3  =  rate_3$rate3_range3_max
>>
>> rate4_min_1   =  rate_4$rate4_range1_min
>> rate4_max_1  =  rate_4$rate4_range1_max
>> rate4_min_2   =  rate_4$rate4_range2_min
>> rate4_max_2  =  rate_4$rate4_range2_max
>> rate4_min_3   =  rate_4$rate4_range3_min
>> rate4_max_3  =  rate_4$rate4_range3_max
>>
>>
>> ## 
>> _______________________________________________________________________________________________________________________________________________________________________________________________
>>
>> ## Rij : ith rate jth range i.e. R23 represents 3rd Range of Rate 2
>> data_lab <- expand.grid(c("R11", "R12", "R13"), c("R21", "R22", "R23"),
>> c("R31", "R32", "R33"), c("R41", "R42", "R43"))
>>
>> range_prob <- list()
>>
>> range_prob[[1]]   <- c(prob_1$rate1_prob1,prob_1$rate1_prob2,
>> prob_1$rate1_prob3)
>> range_prob[[2]]   <- c(prob_2$rate2_prob1,prob_2$rate2_prob2,
>> prob_2$rate2_prob3)
>> range_prob[[3]]   <- c(prob_3$rate3_prob1,prob_3$rate3_prob2,
>> prob_3$rate3_prob3)
>> range_prob[[4]]   <- c(prob_4$rate4_prob1,prob_4$rate4_prob2,
>> prob_4$rate4_prob3)
>>
>> ## COMPUTATIONS
>>
>> pdf <- expand.grid(range_prob)
>> data_lab$probs <- apply(pdf, 1, prod)
>> joint_probs = xtabs(probs ~ Var1 + Var2+Var3+Var4, data = data_lab)
>> write.csv(data.frame(joint_probs), 'joint_probs.csv', row.names = FALSE)
>>
>>
>> #________________________________________________________________________________________________________________________________________________________________________________________________________________________
>>
>> ONS = read.csv('joint_probs.csv')
>>
>> Names <- apply(ONS[, -5], 1, paste, collapse = ' ')
>> write.csv(data.frame(rate_combination = Names, Probability = ONS[, 5]),
>> 'prob_table.csv', row.names = FALSE)
>> #
>> ______________________________________________________________________________________________________________________________________________________________________________________________________________________________
>> N = 10000 # No of random numbers to be generated for each of the 4 rates
>> no_of_instances = round(N*(read.csv('prob_table.csv')$Probability))
>>
>>
>> # #  THE ACTUAL PROBLEM - TO GENERATE 10000 random numbers in proportion
>> and depending on the range of teh given rate in teh combination
>>
>> write.csv(data.frame(rate1_range = ONS[,1], rate2_range = ONS[,2],
>> rate3_range = ONS[,3], rate4_range = ONS[,4], no_of_instances), 'Final
>> Table.csv', row.names = FALSE)
>>
>>
>> ##  Random number generation for Rate1
>> ## -----------------------------------
>>
>> HM = read.csv('Final Table.csv')
>> rate1_rates=rep(c("R11","R12","R13"),27)
>> rate1_rates
>> number = HM$no_of_instances
>> rate1_combination=rep(rate1_rates,number)
>> rate1_combination
>>
>> interval.min=ifelse(rate1_combination=="R11",1.05,ifelse(rate1_combination=="R12",1.3,1.6))
>>
>> interval.max=ifelse(rate1_combination=="R11",1.3,ifelse(rate1_combination=="R12",1.6,1.99))
>> rand.nums_rate1=runif(rate1_combination,min=interval.min,max=interval.max)
>> rate1_series = data.frame(rate1_combination,rand.nums_rate1)
>> write.csv(data.frame(rate1_series), 'rate1_series.csv', row.names = FALSE)
>>
>>
>> ## Random number generation for Rate2
>>
>>
>> rate2_rates=rep(c("R21","R21","R21","R22","R22","R22","R23","R23","R23"),9)
>> rate2_rates
>> number = HM$no_of_instances
>> rate2_combination=rep(rate2_rates,number)
>> rate2_combination
>>
>> interval.min=ifelse(rate2_combination=="R21",2.05,ifelse(rate2_combination=="R22",2.3,2.6))
>>
>> interval.max=ifelse(rate2_combination=="R21",2.3,ifelse(rate2_combination=="R22",2.6,2.99))
>> rand.nums_rate2=runif(rate2_combination,min=interval.min,max=interval.max)
>> rate2_series = data.frame(rate2_combination,rand.nums_rate2)
>> write.csv(data.frame(rate2_series), 'rate2_series.csv', row.names = FALSE)
>>
>>
>> ## Random number generation for Rate3
>>
>>
>> rate3_rates=rep(c("R31","R31","R31","R31","R31","R31","R31","R31","R31","R32","R32","R32","R32","R32","R32","R32","R32","R32","R33","R33","R33","R33","R33","R33","R33","R33","R33"),3)
>> rate3_rates
>> number = HM$no_of_instances
>> rate3_combination=rep(rate3_rates,number)
>> rate3_combination
>>
>> interval.min=ifelse(rate3_combination=="R31",3.05,ifelse(rate3_combination=="R32",3.3,3.6))
>>
>> interval.max=ifelse(rate3_combination=="R21",3.3,ifelse(rate3_combination=="R32",3.6,3.99))
>> rand.nums_rate3=runif(rate3_combination,min=interval.min,max=interval.max)
>> rate3_series = data.frame(rate3_combination,rand.nums_rate3)
>> write.csv(data.frame(rate3_series), 'rate3_series.csv', row.names = FALSE)
>>
>>
>> ## Random number generation for Rate4
>>
>> rate4_rates=rep(c("R41","R42","R43"), each = 27)
>> rate4_rates
>> number = HM$no_of_instances
>> rate4_combination=rep(rate4_rates,number)
>> rate4_combination
>>
>> interval.min=ifelse(rate4_combination=="R41",4.05,ifelse(rate4_combination=="R42",4.3,4.6))
>>
>> interval.max=ifelse(rate4_combination=="R41",4.3,ifelse(rate4_combination=="R42",4.6,4.99))
>> rand.nums_rate4=runif(rate4_combination,min=interval.min,max=interval.max)
>> rate4_series = data.frame(rate4_combination,rand.nums_rate4)
>> write.csv(data.frame(rate4_series), 'rate4_series.csv', row.names = FALSE)
>>
>> ##  Generation of combination names as per the no of random numbers
>> generated
>>
>> PP = read.csv('prob_table.csv')$rate_combination
>> PPP = rep(PP, number)
>>
>> write.csv(data.frame(rate_combination = PPP, rate1 =
>> round(read.csv('rate1_series.csv')$rand.nums, digits = 4), rate2 =
>> round(read.csv('rate2_series.csv')$rand.nums, digits = 4), rate3 =
>> round(read.csv('rate3_series.csv')$rand.nums, digits = 4), rate4 =
>> round(read.csv('rate4_series.csv')$rand.nums, digits = 4)),
>> 'Main_Random_Numbers.csv', row.names = FALSE)
>>
>>
>> _________________________________________________________________________________________________________________________
>> ## END of code : ONS-PPA
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> [[elided Yahoo spam]]
>>
>>        [[alternative HTML version deleted]]
>>
>>
>> ______________________________________________
>> R-help@r-project.org <http://mc/compose?to=r-h...@r-project.org> mailing
>> list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
>> http://www.R-project.org/posting-guide.html<http://www.r-project.org/posting-guide.html>
>> and provide commented, minimal, self-contained, reproducible code.
>>
>>
>
>
> --
> Jim Holtman
> Cincinnati, OH
> +1 513 646 9390
>
> What is the problem that you are trying to solve?
>
>
> ------------------------------
> The INTERNET now has a personality. YOURS! See your Yahoo! 
> Homepage<http://in.rd.yahoo.com/tagline_yyi_1/*http://in.yahoo.com/>
> .
>



-- 
Jim Holtman
Cincinnati, OH
+1 513 646 9390

What is the problem that you are trying to solve?

        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to