2013-11-28 5 views
2

for 루프를 사용하여 숫자 데이터 프레임 목록을 반복하고 각 데이터 프레임의 특정 열에 대한 플롯을 만듭니다. 나는 작동 코드를 가지고 있지만 결과는 이상합니다. 나는 두 개의 플롯을 만들 것이라고 기대하지만 R은 네 개를 만들고 단지 왜 플롯 대신에 프린트를 사용할 때 기대했던 값을 인쇄하고 있기 때문에 왜 그 이유가 이해되지 않을 수 있습니다. 훨씬 큰 데이터 세트의 작은 예 아래 어떤 생각이라도 대단히 감사합니다. 많은 감사합니다!R : 데이터 프레임 목록을 반복하고 제약 조건이있는 열의 플롯을 만듭니다.

# Create data 
a <- c(1,2,3,4,5) 
b <- c(6,7,8,9,10) 
c <- c(0,0,0,1,0) 

d <- c(1,2,3,4,5,6,7,8,9,10) 
e <- c(11,12,13,14,15,16,17,18,19,20) 
f <- c(0,0,0,0,0,0,0,1,0,0) 

# Create data frames 
df1 <- data.frame(cbind(a,b,c)) 
df2 <- data.frame(cbind(d,e,f)) 
names(df2) <- c("a","b","c") 

# Create list of data frames 
l <- list(df1,df2) 

# Create titles for plots 
titlenames <- c("Graph 1","Graph 2") 

# Loop over list of data frames and create plots 
for (i in l){ for(j in titlenames) { 
    plot(x=(i$a[i$c==0]),y=(i$b[i$c==0]),main="",xlab="",ylab="") 
    title(main=paste(j)) 
}} 
+3

'for (i in l) {(titlenames의 j를 위해) ...'2 x 2 = 4 –

+0

와우, 이제 알겠습니다. 정말 고마워! – Triamus

답변

5

이렇게 하시겠습니까? - 내가 대답으로 게시

# Loop over list of data frames and create plots 
for (i in seq(titlenames)) { 
    plot(x=(l[[i]]$a[l[[i]]$c==0]),y=(l[[i]]$b[l[[i]]$c==0]),main="",xlab="",ylab="") 
    title(main=titlenames[i]) 
} 

, 주석 못생긴 읽을 어려울 것이다. 기본적으로, 나는 j 루프를 제거하고 이제는 1 : n 이상의 모든 루프를 추적하며, l이 아닌 모든 것을 추적합니다.

+0

문제를 이해합니다. 귀하의 솔루션은 맞지만, 지금은 데이터 프레임 목록과는 독립적 인 벡터 인 titlenames를 통해 반복하고 있다고 생각합니다. 아직도 당신의 예와 스티븐 헨더슨의 의견으로 나는 그것을 재구성 할 수있다. 고마워요! – Triamus

+0

목록의 data.frames에 다른 열 이름이있는 경우 egabc & def –

+0

예, 실제로 큰 데이터 세트의 경우 색인 생성 작업을 수행하지만 이름을 사용하는 것이 더 쉽습니다. 예제. 감사! – Triamus

관련 문제