我有一个包含2个(或更多)分类变量和一个观察数据的数据框 我想为分类变量的组合生成箱线图,其中观察的数量高于某个阈值。我们的想法是创建一个带有一系列箱图的绘图文件,每个绘图以定义相关子集的分类变量的组合命名。
我的想法是在自定义函数上使用tapply
。这原则上有效(见下文)。我唯一的问题是,我不知道如何将相关的分类变量组合作为函数内部的情节标题。 **我如何访问它们?
目前的解决方案:
cat1 <- c("A","A","A","A","E")
cat2 <- c("a","c","c","c","e")
obs <- c(2.0,2.2,2.5,5.0,1.0)
my_plot <- function(obs_subset,??_cat1-val,cat2-val_??) {
if(length(obs_subset) > 2) boxplot(obs_subset,
main=paste(cat1-val,cat2-val,sep = " ")) ;# how to compute the title
}
indices <- list(cat1,cat2)
pdf(file="theFileName.pdf")
tapply(obs,indices,my_plot)
dev.off()
它没有分类变量的值 如何在相应的调用中访问cat1和cat2的实际值,以便它们可用于标记图?
答案 0 :(得分:0)
您可以在obs
创建数字索引并在tapply
内使用
idx <- seq_along(obs)
该索引用于从obs
,cat1
和cat2
中提取值:
my_plot <- function(obs_idx) {
if(length(obs[obs_idx]) > 2)
boxplot(obs[obs_idx],
main = paste(cat1[obs_idx[1]],
cat2[obs_idx[1]]))
}
现在,您可以使用tapply
。如果您对invisible
返回的值不感兴趣,建议您使用tapply
。
pdf(file = "theFileName.pdf", onefile = TRUE)
invisible(tapply(idx, indices, my_plot))
dev.off()