# [R] Setting elements in data frame

Kaspar Pflugshaupt pflugshaupt at cirsium.ethz.ch
Thu Feb 22 16:10:20 CET 2001

```On Thursday 22 February 2001 15:29, Peter Dalgaard BSA wrote:

>
> recode<-function(x,value,replacement){
> 	x[if (is.na(value)) is.na(x) else x==value] <- replacement
> 	x
> }
> s <-sapply(x,is.numeric)
> x[s] <- lapply(x[s], recode, 6, 6000)
> x[s] <- lapply(x[s], recode, NA, 1000)

Getting better and better!

While we're at it: Why would the following not work (it's the first version I
tried):

data.frame(lapply(x,function(z) ifelse(z==6,6000,z)))

It does the replacement all right, but the factor column gets converted to
integer. Looking at ?ifelse, I find that

`ifelse' returns a value with the same shape as `test' which is
filled with elements selected from either `yes' or `no' depending
on whether the element of `test' is `TRUE' or `FALSE'. If `yes' or
`no' are too short, their elements are recycled.

So could it be that because 6 (an integer) is present in the comparison, the
result _will_ be integer no matter what class z is? The help doesn't say so,
but I might overlook something basic. Still, checking this out:

> data.frame(lapply(x,function(x) ifelse(x==6.0,6000.0,x)))
# would give float results, if above were true
S1   N1   N2
1  2    2 6000
2  3    4   NA
3  4 6000    0
4  1    9 6000

still gives integer results. And the problem does not lie with the data.frame
conversion:

> str(lapply(x, function(x) ifelse(x==6,6000,x)))
List of 3
\$ S1: int [1:4] 2 3 4 1
\$ N1: num [1:4] 2 4 6000 9
\$ N2: num [1:4] 6000 NA 0 6000

puzzled-ly yours

Kaspar Pflugshaupt

--

Kaspar Pflugshaupt
Geobotanical Institute
ETH Zurich, Switzerland

http://www.geobot.umnw.ethz.ch
mailto:pflugshaupt at geobot.umnw.ethz.ch
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._

```