【发布时间】:2016-02-17 07:29:32
【问题描述】:
我正在尝试使用 sapply 将从列表中传递的名称作为情节标题添加到一系列箱线图中,但遇到了麻烦。
首先生成玩具数据来说明问题。
set.seed(12345)
df <- data.frame(v = rep(letters[1:3], times = 4))
for (i in 1:21) {
x <- rnorm(12, 3, 1)
df <- cbind(df, x)
}
colnames (df)<- c("group", paste(rep(letters[1:7], each = 3), rep(1:3, times = 7), sep = ""))
这为我们提供了一个数据集,其中的列按列名的第一个字母聚类。这类似于我自己的数据集,其中有一份问卷,其中包含在多个时间点(很多时间点)测量的多个项目。该问卷产生了几个因素得分。因此,有几个列集群代表了多次测量的问卷的每个因素。在这个玩具数据集中,我们可以认为列名中的字母表示哪个因素,数字表示哪个时间点。
我希望能够通过 sapply 函数选择我制作箱线图的集群/因子。所以我需要制作一个列表,其组件是每个列名的集群。
colsList <-list (aCols <- c("a1", "a2", "a3"),
bCols <- c("b1", "b2", "b3"),
cCols <- c("c1", "c2", "c3"),
dCols <- paste("d", 1:3, sep = ""),
eCols <- paste("e", 1:3, sep = ""),
fCols <- paste("f", 1:3, sep = ""),
gCols <- paste("g", 1:3, sep = ""))
现在做一个箱线图函数。我想根据组为每个聚类因子绘制图。
boxplotFunct <- function (DV, IV, Title) {
boxplot(DV ~ IV, main = Title, horizontal = TRUE)
}
现在在 sapply 循环中调用函数。
par(mfrow = c(1,3))
sapply(df[,colsList[[1]]], function(x) boxplotFunct(x, df$group, colsList[[1]]))
箱线图有效,但每个箱线图的标题包含所有三个列名,而不是相应的列名。在仍然使用 sapply 的情况下,我将如何做到这一点?
我会欢迎有关如何更好地完成整个过程的建议,但我主要想要一些关于如何解决我的特定问题的建议:在 sapply 循环中包含另一个循环(即,这更适合我的一般学习 apply 系列,而不是如何绘制图表)。
【问题讨论】: