我试图使用sapply添加名称作为小区标题传递给一系列盒图的名称,但遇到了麻烦。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 = ""))
现在制作boxplot函数。我想根据小组制作每个群集因素的图。
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]]))
箱线图工作,但每个boxplot的标题包含所有三个列名称,而不是相应的列名称。我仍然在使用sapply时该怎么做?
我会很乐意提出如何更好地完成整个过程的建议,但我主要想提出一些关于如何解决我的特定问题的建议:在sapply循环中包含另一个循环(例如,这更适用于我关于申请家庭的一般学习,而不是如何绘制图表)。
谢谢@fdetsch。十分优雅。这实际上是最有启发性的。 – llewmills
如果我想用不同于列名的名称来标记图,那么我想从第二个列表中调用这些列名?为了论证而说出与colsList相同类型的标签模式,但是从h到n运行。 – llewmills
@llewmills,我更新了上述代码以回应您的最新评论。 – fdetsch