Quantcast
Channel: Active questions tagged r - Stack Overflow
Viewing all articles
Browse latest Browse all 206904

Error in R Code if called in a function (multcompleters, strsplit: non-character argument)

$
0
0

I would like to generate labels from a Tukey test inside a function. There it throws an error whereas if I call the code not inside a function it works absolutely fine.

Other threads say the solution is to convert a variable with "as.character", but when I tried this it did not work.

Sadly I could not figure out the error and it would be great if you could help me. The error and the trace are in the last lines.

Minimal working example:

require(plyr)
require(multcomp)
require(multcompView) 
require(datasets)
data(iris)

iris
Dataset <- iris

####################################################################
#Works:
a=aov(Dataset$Sepal.Length ~ Dataset$Species)
tHSD <- TukeyHSD(a, ordered = FALSE, conf.level = 0.95)
generate_label_df <- function(HSD, flev){
  Tukey.levels <- HSD[[flev]][,4]
  Tukey.labels <- multcompLetters(Tukey.levels)['Letters']
  plot.labels <- names(Tukey.labels[['Letters']])
  boxplot.df <- ddply(Dataset, flev, function (x) max(fivenum(x$y)) + 0.2)
  plot.levels <- data.frame(plot.labels, labels = Tukey.labels[['Letters']],stringsAsFactors = FALSE)
  labels.df <- merge(plot.levels, boxplot.df, by.x = 'plot.labels', by.y = flev, sort = FALSE)
  return(labels.df)
}
LABELS <- generate_label_df(tHSD, 'Dataset$Species')


####################################################################
#Throws error:
doTukey <- function(y_var, x_var, ret=FALSE) {
  require(ggplot2)
  require(plyr)
  require(multcomp)

  a=aov(y_var ~ x_var)
  tHSD <- TukeyHSD(a, ordered = FALSE, conf.level = 0.95)
  generate_label_df <- function(HSD, flev){
    Tukey.levels <- HSD[[flev]][,4]
    Tukey.labels <- multcompLetters(Tukey.levels)['Letters']
    plot.labels <- names(Tukey.labels[['Letters']])
    boxplot.df <- ddply(Dataset, flev, function (x) max(fivenum(x$y)) + 0.2)
    plot.levels <- data.frame(plot.labels, labels = Tukey.labels[['Letters']],stringsAsFactors = FALSE)
    labels.df <- merge(plot.levels, boxplot.df, by.x = 'plot.labels', by.y = flev, sort = FALSE)
    return(labels.df)
  }

  LABELS <- generate_label_df(tHSD, 'Dataset$Species')
}

doTukey(Dataset$Sepal.Length, Dataset$Species) # Error:  Error in strsplit(x, sep) : non-character argument, 
#Trace:
#5.strsplit(x, sep) 
#4.vec2mat2(namx) 
#3.multcompLetters(Tukey.levels) 
#2.generate_label_df(tHSD, "Dataset$Species") 
#1.doTukey(Dataset$Sepal.Length, Dataset$Species) 

Thanks


Viewing all articles
Browse latest Browse all 206904

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>