So the thing is this, ifelse puts together a vector elementwise from two
other vectors (or other things, but vectors is vague enough for now) based
on a series of T/F values: you only put in one logical test, so you only get
a vector of length 1 back, here MODE1[1]=4. It seems like a regular if/else
statement (not the vector function) would do the job here:

if (sum(df$Freq)/length(df$Freq)==1){
    warning("No Mode: Frequency of all values is 1", call. = FALSE)
} else {
    print(MODE1)
}

If for whatever reason you really don't want to use the if/else structure, I
suppose you could repeat your logical test three times e.g.,

test <- sum(df$Freq)/length(df$Freq)==1; test = rep(test,length(MODE1));
ifelse(test,warning("No Mode: Frequency of all values is 1", call. =
FALSE),MODE1)

but don't do that: it's ridiculous.

Hope this works for you,

Michael Weylandt


On Sat, Jul 30, 2011 at 12:48 AM, Tyler Rinker <tyler_rinker@hotmail.com>wrote:

>
> Greetings R Community,
>
> I am working with the ifelse function and it is returning something
> unexpected.  In the code the line with the MODE1 assignment the output is a
> vector [1] 4 5 6  but when I put the MODE1 object into the ifelse function
> [R}'s output for MODE1 is the first number from the string (4).  Why is
> this?  Given the supplied vector of x I would assume both the MODE1 and
> ifelse() lines to return the same result.  I would like the ifelse to return
> the entire vector [1] 4 5 6 as in the previous line.
>
> OS: Win7
> R version 2.14 beta
>
>
> #=======================================================================
> #                                        Beginning of code
> #=======================================================================
> x<-c(2,3,4,4,5,5,6,6,8,10)
>
> df<-as.data.frame(table(x))
> df<-df[order(df$Freq),]
> m<-max(df$Freq)
> (MODE1<-as.vector(as.numeric(as.character(subset(df,Freq==m)[,1]))))
> ifelse(sum(df$Freq)/length(df$Freq)==1,warning("No Mode: Frequency of all
> values is 1", call. = FALSE),MODE1)
> #=======================================================================
> #                                             End of code
> #=======================================================================
>
>                                                R Console Output
> > (MODE1<-as.vector(as.numeric(as.character(subset(df,Freq==m)[,1]))))
> [1] 4 5 6
> > ifelse(sum(df$Freq)/length(df$Freq)==1,warning("No Mode: Frequency of all
> values is 1", call. = FALSE),MODE1)
> [1] 4
>
> Thank you in advance,
> Tyler
>        [[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.
>

	[[alternative HTML version deleted]]

