[R] Calculate correctly, but gives an error message

Prof Brian Ripley ripley at stats.ox.ac.uk
Tue Jun 29 10:41:34 CEST 2004


You are using an undefined object `nace'.  If I use sort.nace, it works

> sum1 <- matrix(ncol=1, nrow=length(sort.nace))
> for(i in 1:length(sort.nace)){  # not length(nace)
+         sum1[i,] <- sum(subset(x, a==sort.nace[i], select=b), 
na.rm=TRUE)
+         }
> 

I think you were trying to access rows beyond your matrix, so the error 
occurred after sum1 was filled.

I have little idea what you are trying to do: might it be tapply(x$b, a,
sum)?  At least that gives the same answer as the corrected code.


On Tue, 29 Jun 2004, TEMPL Matthias wrote:

> Hi!
> 
> I will calculate sum´s in the following way:
> E.g.: 
> 
> 
> a <- rpois(100,20)
> b <- rpois(100,5)
> 
> x <- data.frame(cbind(a,b))
> 
> # the sum´s should be calculated based on a.
> 
> attach(x) 
> 
> sort.nace <- unique(sort(x[,1]))
> 
> sum1 <- matrix(ncol=1, nrow=length(sort.nace))
> 
> # I calculate the sum of all values of b, which have the same category in a. Eg.:
> 
> sum1[1,] <- sum(subset(x, a==sort.nace[1], select=b), na.rm=TRUE)
> 
> # or:
> 
> sum1[5,] <- sum(subset(x, a==sort.nace[5], select=b), na.rm=TRUE)
> 
> # all is ok.
> # but when I do it in a loop, I get an error message.
> 
> sum1 <- matrix(ncol=1, nrow=length(sort.nace))
> for(i in 1:length(nace)){
> 	sum1[i,] <- sum(subset(x, a==sort.nace[i], select=b), na.rm=TRUE)
> 	}
> #Error in Summary.data.frame(..., na.rm = na.rm) : 
> #        only defined on a data frame with all numeric or complex variables
> 
> # but sum1 was correct calculated(!):
> 
> # sum1
> #       [,1]
> #  [1,]    3
> #  [2,]    4
> #  [3,]    8
> #  [4,]    7
> #  [5,]   41
> #  [6,]   57
> #  [7,]   38
> #  [8,]   15
> #  [9,]   44
> # [10,]   72
> # [11,]   57
> # [12,]   27
> # [13,]   12
> # [14,]   24
> # [15,]   29
> # [16,]   16
> # [17,]   19
> # [18,]    3
> # [19,]    4
> # [20,]    8
> # [21,]    6
> 
> The variables of x are of class numeric. 
> My function, which should calculate these sum´s, does not work, because of this error.
> 
> Can anybody please tell me, what I´m doing wrong?
> 
> (I think it would be better to write a sapply instead of the loop, but I have two functions (sum and subset) and it is very hard for me to use the sapply here correctly)
> 
> Thanks,
> Matthias
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://www.stat.math.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
> 
> 

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595




More information about the R-help mailing list