[R] R- Help (looping)

Rui Barradas ruipbarradas at sapo.pt
Tue Jul 31 09:27:05 CEST 2012


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>
>>>>> 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>
>>>>> and provide commented, minimal, self-contained, reproducible code.
>>>>>
>>>>>
>



More information about the R-help mailing list