[R] R- Help (looping)

Rui Barradas ruipbarradas at sapo.pt
Tue Jul 31 15:54:31 CEST 2012


Hello,

Glad it helped.
E fico à espera do relatório.

Rui Barradas
Em 31-07-2012 14:40, Wellington Silva escreveu:
> Rui,
>
> This is a cientific initiation program.
>
> The idea is to develop a code which can simulate data and calculate the ARL
> later.
>
> *So, a little bit later yesterday night, after sending the email, I've
> figuered how to use the rnorm and then my problems were gone.
>
> Ok, we were working with normal distribution, that's why I needed to use
> rnorm. These simulations have just one purpose: calculate ARL at the end of
> the project.
>
> And, I want to thank you for the help, thank you so much, you've really
> helped me.
>
> As soon as I'm done with the final report, at the "special thanks" page,
> I'm gonna put your name Haha. Because, your help was enormous.
>
> Thanks again, I'll send you a copy of the final report as soon as I finish
> it if you wish.
>
> 2012/7/31 Rui Barradas <ruipbarradas at sapo.pt>
>
>> Hello,
>>
>> Inline
>> Em 31-07-2012 02:59, Wellington Silva escreveu:
>>
>>   Ok,
>>> This really helped.
>>>
>>> You've probably noticed, I'm a begginer using R.
>>>
>>> And when you said that you tried with rnorm and the counts were not zero,
>>> where did you use the rnorm?
>>>
>> Where the runif is, in its stead use
>> matrix( rnorm(nc*dds), ...etc... )
>>
>> But note that this is fake data, what is the distribution of your dataset?
>> Or is the purpose of this simulations? If so, there must also be a
>> distribution to replicate, no?
>>
>> Rui Barradas
>>
>>> The point is, I need this count to be different from zero, so I can use
>>> the
>>> ARL later on.
>>>
>>> I need how many values are out of control (for each column /variable),
>>> store these values in a vector, calculate this vector's mean, and then
>>> calculate the ARL.
>>>
>>> I've got to the same point as you did, but I'm stuck in the same problem.
>>> I
>>> need this count do be different from zero.
>>>
>>> I'm still learning, haha, please be patient.
>>>
>>> Best Regards.
>>>
>>> 2012/7/30 Rui Barradas <ruipbarradas at sapo.pt>
>>>
>>>   Hello,
>>>> Try the following.
>>>>
>>>> # make up some data
>>>> dds <- 1e3
>>>> nc <- 10
>>>> xss <- data.frame(matrix(runif(nc*****dds, min=-1, max=1), ncol=nc))
>>>>
>>>> names(xss) <- paste0("xs", 1:10)
>>>>
>>>> # two functions with descriptive names
>>>> getControlLimits <- function(x, L = 3){
>>>>       mu <- mean(x)
>>>>       sigma <- sd(x)
>>>>       c(lcl = mu - L*sigma, ucl = mu + L*sigma)
>>>> }
>>>>
>>>> countOutOfControl <- function(x, L = 3){
>>>>       cl <- getControlLimits(x, L = L)
>>>>       sum( x < cl["lcl"] | x > cl["ucl"] )
>>>> }
>>>>
>>>> sapply(xss, getControlLimits)    # To know why the next returns all zeros
>>>> sapply(xss, countOutOfControl)    # No values outside control limits
>>>>
>>>>
>>>> The data comes from an uniform in the interval (-1, 1) therefore the sd
>>>> is
>>>> sqrt(1/3) = 0.577. Times 3 gives values for lcl and ucl clearly below and
>>>> above -1 and 1, respectively.  (I've tried rnorm and the counts were not
>>>> zero.)
>>>> But this is just a data example to see if the code works, and it does.
>>>>
>>>>
>>>> Hope this helps,
>>>>
>>>> Rui Barradas
>>>>
>>>> Em 30-07-2012 22:04, Wellington Silva escreveu:
>>>>
>>>>   Ok Rui,
>>>>> I'll try to explain myself a little bit better.
>>>>>
>>>>> I have 10 columns, with 1000 rows each. (Each column represents a
>>>>> variable
>>>>> of the process)
>>>>>
>>>>> these columns were simulated using runif, with values between 4 and 6.
>>>>>
>>>>> I need to calculate the control limits for each column (variable), and
>>>>> verify if they are within the bounds accepted.
>>>>>
>>>>> For now, I'm reading these columns separately, I'm creating variables to
>>>>> read only one of the each column, and then check if the values in this
>>>>> column is within the limits or not.
>>>>>
>>>>> PS. All these columns originally come from a dataframe. something like
>>>>> this: (dds = 1000)
>>>>>
>>>>> xs1<-runif(dds, min=-1, max=1)
>>>>> xs2<-runif(dds, min=-1, max=1)
>>>>> xs3<-runif(dds, min=-1, max=1)
>>>>> xs4<-runif(dds, min=-1, max=1)
>>>>> xs5<-runif(dds, min=-1, max=1)
>>>>> ...
>>>>> xs10<-runif(dds, min=-1,max=1)
>>>>> xs<-data.frame(xs1,xs2,xs3,****xs4,xs5,..xs10)
>>>>>
>>>>> ______________________________****_______________
>>>>>
>>>>>
>>>>>
>>>>> #Reading columns (first one)
>>>>> c.n1 <- 'xs1'
>>>>> c1 <- with(xss, get(c.n1))
>>>>> #Mean
>>>>> mc1 <- mean (c1)
>>>>> #Standard deviation
>>>>> sdc1 <- sd(c1)
>>>>> #Control Limits
>>>>> L=3
>>>>> uclc1 = mc1 + L*sdc1
>>>>> lclc1 = mc1 - L*sdc1
>>>>>
>>>>>
>>>>> I need an "if" inside a loop to do the following:
>>>>>
>>>>> for (each column)
>>>>>
>>>>> if (value in c1 < lclc1 | value in c1 > uclc1) {Count how many values
>>>>> are
>>>>> outside the bounds}
>>>>>
>>>>> And I need this process to be repeated to all columns.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> 2012/7/30 Rui Barradas <ruipbarradas at sapo.pt>
>>>>>
>>>>>    Hello,
>>>>>
>>>>>> Your code example doesn't make much sense, it needs decrypting. Let's
>>>>>> see,
>>>>>>
>>>>>> for(k in 1:length(c1)){
>>>>>>        if(c1[k] < lcl | c1[k] > ucl) {do something}
>>>>>> }
>>>>>>
>>>>>> If this is it, then you can completely avoid the loop:
>>>>>>
>>>>>> i1 <- c1 < lcl | c1 > ucl       # create an index vector
>>>>>> out.of.control <- c1[ i1 ]    # save the values
>>>>>>
>>>>>> When you say you have a column, is it a matrix column? data.frame?
>>>>>> Give a data example with
>>>>>>
>>>>>> dput( head(myData, 20) )   # paste the output of this in a post
>>>>>>
>>>>>> Hope this helps,
>>>>>>
>>>>>> Rui Barradas
>>>>>>
>>>>>> Em 29-07-2012 21:59, Wellington G. Silva escreveu:
>>>>>>
>>>>>>    Hi,
>>>>>>
>>>>>>> I'm Wellington from Brazil and I have the following issue:
>>>>>>>
>>>>>>>
>>>>>>> I've been working on a project a for a while, and I'm having trouble
>>>>>>> in
>>>>>>> using the loop (for)
>>>>>>>
>>>>>>>
>>>>>>> I need to read a column (c1), and for each value of this column, I
>>>>>>> need
>>>>>>> to
>>>>>>> check if it's within the control limits
>>>>>>>
>>>>>>>
>>>>>>> So, I was trying to do this:
>>>>>>>
>>>>>>>
>>>>>>> For (k in 1: c1)
>>>>>>>
>>>>>>>
>>>>>>> If (c1< lcl1 | c1 > ucl1) {here I need to store the values outside the
>>>>>>> limits)
>>>>>>>
>>>>>>>
>>>>>>> I have 5 columns, need to do the same process in each one of them.
>>>>>>>
>>>>>>>
>>>>>>> And later on I'm gonna concatenate these 5 vectors and calculate its
>>>>>>> mean
>>>>>>> for an ARL project.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>            [[alternative HTML version deleted]]
>>>>>>>
>>>>>>> ______________________________******________________
>>>>>>> R-help at r-project.org mailing list
>>>>>>> https://stat.ethz.ch/mailman/******listinfo/r-help<https://stat.ethz.ch/mailman/****listinfo/r-help>
>>>>>>> <https://**stat.ethz.ch/mailman/****listinfo/r-help<https://stat.ethz.ch/mailman/**listinfo/r-help>
>>>>>>> <https://stat.**ethz.ch/**mailman/listinfo/r-**help<http://ethz.ch/mailman/listinfo/r-**help>
>>>>>>> <http**s://stat.ethz.ch/mailman/**listinfo/r-help<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<http://www.R-project.org/**posting-guide.html>
>>>>>>> <http://www.**R-project.org/posting-guide.**html<http://www.R-project.org/posting-guide.html>
>>>>>>> and provide commented, minimal, self-contained, reproducible code.
>>>>>>>
>>>>>>>
>>>>>>>
>



More information about the R-help mailing list