On Jul 15, 2011, at 5:20 AM, Ashim Kapoor wrote:

Dear R helpers,


Please have a look at the following : -

Note : My goal is to find and replace all Inf's in a data array with 0.

t<-data.frame(A=c(Inf,0,0),B=c(1,2,3))
t
   A B
1 Inf 1
2   0 2
3   0 3

str(t)
'data.frame':    3 obs. of  2 variables:
$ A: num  Inf 0 0
$ B: num  1 2 3
t[which(t==Inf,arr.ind=T)]
[1] Inf

Several problems here.
`t` is a perfectly good function name so using it as an object name is confusing.


t[which(t==Inf,arr.ind=T)]<-0
Error in `[<-.data.frame`(`*tmp*`, which(t == Inf, arr.ind = T), value = 0)
:
 only logical matrix subscripts are allowed in replacement

Query : Why does the search work but the replace not work ?

Because you gave a numeric matrix as an argument to "data.frame.[<-" and it wanted a different mode. I think it would have worked if `t` were a matrix.



Many thanks for your time and efforts.

Two methods that would accomplish the task:

ttt<-data.frame(A=c(Inf,0,0),B=c(1,2,3))

ttt[is.infinite(as.matrix(ttt))] <- 0

Or:

apply(ttt, 1:2, function(x) x[is.infinite(x)] <- 0 )

Ashim

        [[alternative HTML version deleted]]

______________________________________________
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.

David Winsemius, MD
West Hartford, CT

______________________________________________
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