我試圖使用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