Я хотел бы создать ярлыки из теста Тьюки внутри функции. Там он выдает ошибку, тогда как, если я вызываю код не внутри функции, он работает абсолютно нормально.
Другие потоки говорят, что решение состоит в том, чтобы преобразовать переменную с помощью "as.character", но когда я попробовал это, он сделалне работает.
К сожалению, я не смог понять ошибку, и было бы здорово, если бы вы могли мне помочь. Ошибка и трассировка находятся в последних строках.
Минимальный рабочий пример:
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)
Спасибо