A simple interquartile function:

```
myIQR<- function( y, na.rm=FALSE)
{
# function body
hold<- quantile( y, c( .75,.25),
na.rm = na.rm )
)
# return
return( hold[2]-hold[1])
}
```

A `for`

loop is often a useful way to loop over a data set or to do a compuation.

To get started here is another way to modify more than one value

*Usual*

```
x<- 1:10
xSquared<- x^2
cbind( x, xSquared)
```

*With for loop*

```
for( k in 1:10){
print( c(k,k^2) )
}
```

*Saving data*

```
x<- 1:10
xSquared<- rep( NA, 10)
for( k in 1:10){
xSquared[k] <- x[k]^2
}
```

*as a more generic function*

```
makeSquaresTable<- function(N){
x<- 1:N
xSquared<- rep( NA, N)
for( k in 1:N){
xSquared[k] <- x[k]^2
}
myTable<- cbind( x, xSquared)
return(myTable)
}
Looping over data subsets
Find the mean for the AudiA4$prices by year
```

```
for( yr in 1999:2015){
ind<- AudiA4$year == yr
tempMean<- mean( AudiA4$price[ind] )
print( c(yr, tempMean) )
}
```

An important command to use within a for loop is the `if`

statement to control computations based on conditional statements.

For example for the `AudiA4`

data set one might only want to calculate statistics by year if the number of samples is large enough.

```
for( yr in 1999:2015){
ind<- AudiA4$year == yr
tempMean<- mean( AudiA4$price[ind] )
if( sum( ind) >=20 ){
print( c(yr, tempMean) )
}
}
```

An extension is the if/else statement that allows you to deal with both cases (TRUE or FALSE). Here is an example for changing the if block above

```
for( yr in 1999:2015){
ind<- AudiA4$year == yr
tempMean<- mean( AudiA4$price[ind] )
### ifelse block
if( sum( ind) >= 20 ){
cat( yr, tempMean, fill=TRUE)
}
else{
cat( yr, " has less than 20 observations",
fill=TRUE)
}
### end ifelse block
}
```

`cat`

is a handy way to print out things in a loop. It is very flexible but be sure to add `fill = TRUE`

to start the next printing on a new line.