2016-06-07 6 views
2

한 페이지에 여러 개의 개체가 있고 각기 다른 제목이 있습니다. 현재 필자는 lapply 내에서 ggtitle로 피드하는 플롯 제목의 벡터를 가지고 있지만 각 플롯에이 벡터의 첫 번째 항목 만 추가합니다. lapply 내에서 별도의 플롯 제목

빠른 추한 최소한의 예를

은 다음과 같습니다 :

library(ggplot2) 
library(gridExtra) 

#My 'data' 
A.a <- rnorm(10) 
A.b <- rnorm(30) 
lmnames <- ls(pattern = "A.*") 

titlenames <- c("Plot A", "Plot B") 

plotlist <- list() 
#I have a more complex ggplot function in reality, but I'm using qplot here as a placeholder. 
plotlist <- lapply(lmnames, FUN=function(x,y){qplot(get(x)) + ggtitle(y)}, y=titlenames) 

grid.arrange(grobs = plotlist) 

그것은 다음과 같습니다 Incorrect titles using ggtitle in lapply

당신이 볼 수있는 두 그래프는 "플롯 A"표시되어 있습니다. 필자는 그에 따라 각 줄거리를 표시하고 싶습니다. 아무도 내가 여기에서 놓친 것을 볼 수있게 도와 줄 수 있습니까? 미리 감사드립니다.

답변

2
에서 읽을 것을을

귀하의 문제는 귀하의 모든 플롯에서 귀하의 직함이 "플롯 A ""플롯 B ", plotlist[[1]]$labels$title 참조.

plotlist <- lapply(1:length(lmnames), function(x){ 
    qplot(get(lmnames[x])) + ggtitle(titlenames[x]) 
}) 

내가 더 우아한 해결책이 있습니다 확신 :

실제로 동작하는 코드는 다음과 같다. 하지만이 방법이 효과적입니다.

감사합니다, J_F

0

이 잘 작동 :

plotlist <- lapply(1:2, FUN=function(i){qplot(get(lmnames[i])) + ggtitle(titlenames[i])}) 

또는이 :

plotlist <- apply(data.frame(lmnames, titlenames), 1, FUN=function(x){qplot(get(x[1])) + ggtitle(x[2])}) 

enter image description here

문제는 모두 반복에서, y=titlenames의 첫 번째 값이

2

여러 변수를 통해 반복하는 것은 종종 청소기 mapply 함께,

library(ggplot2) 
library(gridExtra) 

dl <- list("Plot A" = rnorm(10), "Plot B" = rnorm(10)) 
plot_fun <- function(x, y) qplot(x) + ggtitle(y) 
grid.arrange(grobs = Map(plot_fun, x = dl, y = names(dl))) 

enter image description here

+0

덕분에,이 좋은,하지만 모두 비슷한 명명 된 개체를 잡아 수있는 방법이있다 예제에서와 같이 수동으로 네이밍과 객체 리스팅을 수행하는 대신에'lmnames <- ls (pattern = "A. *")'를 사용하는 방식을 작업 공간에서 자동으로 이름을 지정합니까? 나는 실제 시나리오에서 내가 음모를 꾸미고 싶은 대상이 2 개 이상 있기 때문에 묻습니다. – KerrBer

+1

'mget'이 도움이 될 수 있지만 일반적으로 작업 공간에 많은 객체가 놓여 있지 않는 것이 좋습니다. 전체 목록에서 그들을 함께 유지하는 것이 일반적으로 R에서 더 나은 전략이다. – baptiste