访问tapply中的分类变量

时间:2014-01-20 11:40:17

标签: r

我有一个包含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的实际值,以便它们可用于标记图?

1 个答案:

答案 0 :(得分:0)

您可以在obs创建数字索引并在tapply内使用

idx <- seq_along(obs)

该索引用于从obscat1cat2中提取值:

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()