# [R] R- Help (looping)

Tue Jul 31 01:10:54 CEST 2012

```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,

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)
>
> _____________________________________________
>
>
> 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.
>
>
>
>
>
>> 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,
>>
>>
>> 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>