1
我需要顯示1-3個圖表,並且我希望圖表的標題基於使用的變量名稱。使用變量名稱作爲劇情標題與lapply
我能得到這個工作,我多麼希望下面:
library(grid)
library(ggplot2)
library(gridExtra)
a1 <- sample(1:100)
a2 <- sample(1:100)
a3 <- sample(1:100)
make_graph <- function(x, y=deparse(substitute(x))){
time <- 1:100
dfp <- data.frame(time, x)
ggplot(dfp, aes(x=time, y=x)) + geom_point() +
ggtitle(y)
}
g1 <- make_graph(a1)
g2 <- make_graph(a2)
g3 <- make_graph(a3)
grid.arrange(g1,g2,g3)
但是,當我需要包括條件語句,如果只有1或2個樣品(即只A1或A1 & A2這成爲低效)。
我得到的一切以下工作,用正確的標題除外:
library(grid)
library(ggplot2)
library(gridExtra)
a1 <- sample(1:100)
a2 <- sample(1:100)
a3 <- sample(1:100)
sample_list <- paste0("a", seq_len(3))
make_graph <- function(x, y=deparse(substitute(x))){
time <- 1:100
dfp <- data.frame(time, x)
ggplot(dfp, aes(x=time, y=x)) + geom_point() +
ggtitle(y)
}
graphs_list <- lapply(mget(sample_list), make_graph)
do.call("grid.arrange", graphs_list)
與上面的代碼我得到正確的功能,但deparse()在make_graph()似乎有一些問題,我假設由於被lapply打電話。因此,取而代之的是我在第一個例子中使用的標題(「a1」,「a2」,「a3」),而是將「X [[1L]]」,「X [[2L]]」,「X [ 3L]」。
我也試着改變lapply功能,但這只是給了我在列表中的第一個「頭銜」:
sample_list <- paste0("a", seq_len(3))
make_graph <- function(x, y){
time <- 1:100
dfp <- data.frame(time, x)
ggplot(dfp, aes(x=time, y=x)) + geom_point() +
ggtitle(y)
}
graphs_list <- lapply(mget(sample_list), make_graph, y=sample_list)
do.call("grid.arrange", graphs_list)
我不知道最好的方法來完成我什麼試圖在這裏做。 感謝您的幫助。
太棒了!我發誓我每天都會學習一項新功能,我簡直不敢相信:) – user3564760
@ user3564760而'Map'基本上是'mapply',默認不會簡化結果。所以它與'lapply'緊密相關,它只是讓你迭代多個參數傳遞給函數 – MrFlick