On May 9, 2013, at 8:50 AM, Pooya Lalehzari wrote:

> Hello,
> When I use "apply" on a data frame, it seems like I get an error when I have 
> a column that is not numeric. Via trial and error I realized that if I remove 
> that column, I can get it to run. Is there a better way to tell the function 
> not to worry about the character columns, especially since I am not even 
> trying to do any calculations on it?

Not really. 
> R_Cat is the character column that is causing error and I am trying to do 
> calculations on t5R.
> 
>  apply(Data_F[,names(Data_F) != "R_Cat"],1,function(row) {
>    ifelse( abs(row["t5R"]) <Thresh1, 0,
>    ifelse( abs(row["t5R"]) <Thresh2, ifelse( row["t5R"] <0, -1, 1),
>    ifelse( abs(row["t5R"]) <Thresh3, ifelse( row["t5R"] <0, -2, 2),
>    ifelse( abs(row["t5R"]) <Thresh4, ifelse( row["t5R"] <0, -3, 3),
>    ifelse( abs(row["t5R"]) <0, -4, 4)))))

There would be a better way of writing that code and avoid all those ugly and 
inefficient nested 'ifelse' calls by replacing with vectorized operations:

Data_F_Cat$t5R_Cat <- findInterval( abs( Data_F_Cat$t5R ) , c(Thresh1, Thresh2, 
Thresh3, Thresh4) )
Data_F_Cat$t5R_Cat <- sign(Data_F_Cat$t5R) * Data_F_Cat$t5R_Cat

The last clause is clearly not coded correctly since abs( anything) is never 
less than 0. Note that there could be a re-coding difference if t5R is >= 
Thresh4, which was not a condition you were testing for. I suspect you wanted 
tehm coded 4 or -4 and that is what my code should accomplish.

-- 

David Winsemius
Alameda, CA, USA

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to