[R] loop and sapply problem, help need
Phil Spector
spector at stat.berkeley.edu
Sat Apr 9 22:13:03 CEST 2011
Ram -
I think you'll have to explain what you're trying to do.
First, you're creating a 10x10 matrix newd, which could
be done a bit more efficiently by using
newd = matrix(sample(c(1,2,3,3,),10*length(pvec),replace=TRUE),ncol=10)
Notice that calling sapply on a matrix applies the function to each
element of the matrix.
But your fun3 function really doesn't make sense, since you are
testing each scalar element for equality to a scalar, and then setting
it equal to a vector. It seems to me that what you're trying to do is
smpool = c(1,2,3,3)
allvals = rbind(lcd1,lcd2,lcd3)
pn = replicate(10,allvals[sample(smpool,1),])
but I can't be sure.
- Phil Spector
Statistical Computing Facility
Department of Statistics
UC Berkeley
spector at stat.berkeley.edu
On Sat, 9 Apr 2011, Ram H. Sharma wrote:
> Dear R experts
>
> Sorry for this question
>
> M1 <- 1:10
> lcd1 <- c(11, 22, 33, 44, 11, 22, 33, 33, 22, 11)
> lcd2 <- c(22, 11, 44, 11, 33, 11, 22, 22, 11, 22)
> lcd3 <- c(12, 12, 34, 14, 13, 12, 23, 23, 12, 12)
>
> #generating variables through sampling
> pvec <- c("PR1", "PR2", "PR3", "PR4", "PR5", "PR6", "PR7", "PR8", "PR9",
> "PR10")
> fun11 <- function(x){
> smpool <- c(1,2,3,3)
> x <- sample(smpool, 10, replace= TRUE)
> }
> newd <- sapply (pvec, fun11)
>
>
> # function to recode this new generated data
> fun3 <- function(x) {
> (if ( x ==1){
> x = lcd1
> }else if (x ==2){
> x = lcd2
> } else if ( x ==3 ){
> x = lcd3
> } else x = NA )
> return(x)
> }
> Applying the function:
> pn <- sapply (newd, fun3)
>
> I am getting 10 x 100 matrix, in contrast to 10 x 10 what I am expecting !
>
> My objective here is to replace data points in all variables in newd
> with corresponding value with values vector lcd1 or lcd2 or lcd3 depending
> upon whether they are 1 or 2 or 3.
> For example;
>
> lcd1 <- c(11, 22, 33, 44, 11, 22, 33, 33, 22, 11)
> lcd2 <- c(22, 11, 44, 11, 33, 11, 22, 22, 11, 22)
> lcd3 <- c(12, 12, 34, 14, 13, 12, 23, 23, 12, 12)
>
> PR1 <- c(1, 2, 3, 2, 1, 1, 1, 2, 3, 1)
>
> with the new
> PR1n <- c(11, 11, 34, 11, 11, 22, 33, 22, 12, 11)
> # as the first element of this vector is determined by PR1[1] indicator
> determines whether to pick lcd1[1] or lcd2[1] or lcd3[1] element
> similarly for PR1[2] indicator whether to pick lcd1[2] or lcd2[2] or lcd3[2]
> element
>
> The same process need to be continued other PR2 to PR10 variables. That's
> why I attempted to use sapply.
>
> Thank you for your help
>
>
> --
>
> Ram H
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at 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.
>
More information about the R-help
mailing list