[R] Problem with Freq function {prettyR}
Jim Lemon
jim at bitwrit.com.au
Sat Jun 14 12:28:54 CEST 2008
ukoenig at med.uni-marburg.de wrote:
>> ...
>>I have a problem with freq from prettyR.
>>
>>Please have a look at my syntax with a litte example:
>>
>>
>>library(prettyR)
>>
>>#Version 1
>>test.df<-data.frame(q1=sample(1:4,8,TRUE), gender=sample(c("f","m"),8,TRUE))
>>test.df
>>freq(test.df) #No error message
>>
>>#Version 2
>>test.df<-data.frame(gender=sample(c("f","m"),8,TRUE), q1=sample(1:4,8,TRUE))
>>test.df
>>freq(test.df)
>>
>>Error message: "Error in vector("integer", length) : Vector size can´t be NA"
>>
>>Can someone tell me, why an error message occurs in version two? I am
>>helpless...
Hi Udo,
I'm surprised that this bug survived as long as it did. When I looked at
the code, I immediately thought, "That's not right" and it wasn't. Here
is the repaired function that will be in version 1.3-1.
Jim
freq<-function(x,variable.labels=NULL,display.na=TRUE,levels=NULL) {
if(missing(x))
stop("A vector, dataframe or matrix must be supplied")
xdim<-dim(x)
# get the variable label here or it might be clobbered
if(is.null(xdim)) {
if(is.null(variable.labels))
variable.labels<-deparse(substitute(x))
x<-list(x)
nfreq<-1
}
else {
nfreq<-xdim[2]
if(is.matrix(x))
x<-as.data.frame(x)
if(is.null(variable.labels))
variable.labels<-names(x)
if(is.null(variable.labels))
variable.labels<-paste("V",1:xdim[2],sep="",collapse="")
}
freq.list<-rep(list(0),nfreq)
for(i in 1:nfreq) {
# see if there are any NAs and if they should be displayed
if(display.na) nna<-sum(is.na(x[[i]]))
else nna<-0
# tabulate barfs with NAs
xt<-na.omit(x[[i]])
xlevels<-levels(xt)
if(is.null(xlevels)) xlevels<-unique(xt)
if(is.numeric(x[[i]])) xt<-factor(xt,levels=xlevels)
freqs<-tabulate(xt)
categories<-xlevels
# if NAs present, tack on a label
if(nna) categories<-c(categories,"NA")
# tack on the NA count
if(nna) freqs<-c(freqs,nna)
names(freqs)<-categories
freq.list[[i]]<-freqs
}
names(freq.list)<-variable.labels
class(freq.list)<-"freq"
return(freq.list)
}
More information about the R-help
mailing list