2014-01-20 2 views
1

나는 data.table을 부분 집합하고 몇 줄의 코드를 통해 결과를 실행하는 데 사용되는 목록을 반복하려고합니다. 변수를 사용한 부분 집합은 for 루프없이 완벽하게 작동하지만 루프가 포함되면 예상대로 작동하지 않습니다. 문제는 데이터 형식이나 범위에 의해 발생하는 것 같습니다.R : for 루프 및 필터 data.table 사용

다음 코드는 완벽하게 작동합니다 :

dt <- data.table(mpg) 
list <- levels(dt$manufacturer) 

dt[manufacturer==list[3]] 

그때 for 루프와 목록을 루프를 시도하는 경우 : [업데이트 된 코드 - 해결] 내가하지 않는

for (var in list) { 
    subs <- data.table(melt(dt[manufacturer==var, list(model, hwy, cty)], id.vars='model')) 

    png(paste(var, 'png', sep='.')) 
    print(ggplot(subs, aes(model, value, col=variable)) + geom_point()) 
    dev.off() 
} 

아무것도.

내게는 코드 부분이 동일하게 보이고 똑같이 작동해야합니다. 아무도 내가 두 번째 필터링과 아무 것도 얻지 못할 수도 있다는 제안을 가지고 있습니까? 어떤 도움을 주셔서 감사합니다.

+1

그것은 많은 도움이 될 것입니다. 너는 무엇을하고 싶은가? 마지막 작업은 각 하위 집합을'인쇄 '하는 것입니까? – Arun

+0

데이터 표를 사용하여 하위 집합을 지정하고 _apply 또는 다른 방법을 사용하지 않으려는 경우 예제가 철저하다고 생각합니다. 테이블을 부분 집합으로 만들면 결과를 사용하여 그래프를 인쇄합니다. mpg 데이터 세트의 모든 제조업체와 마찬가지로 수많은 하위 집합이 있으므로 반복하는 것이 가장 효율적인 방법입니다. – sgunnars

+0

IIUC, 관용적 인 방법은'dt [, , by = manufacturer]'일 것입니다. – Arun

답변

4

이것은 매우 일반적인 질문입니다.

for (i in 1:5) {i} 
# no output 
for (i in 1:5) {print(i)} 
[1] 1 
[1] 2 
[1] 3 
[1] 4 
[1] 5 

그러나, 코드가 실행 :

for (i in 1:5) {j <- i^2} 
j 
[1] 25 

은 그냥 루프에서 몇 가지 코드를 실행하는 경우에 결과를 저장하는 전역 변수를 사용하는 차이를 확인하십시오.

UPD :

this 논의는 다음 :이 함수로서 내부 루프

, 자동 인쇄가 오프된다. 출력을 보려면 두 경우 모두 명시 적으로 인쇄해야합니다.

인쇄가 없다는 것은 단지 규칙에 불과하기 때문에 콘솔이 스팸 메일을받지 못하는 것입니다. 당신이 제조 업체를 통해 루프를 원하는 일부 요약 코드를 실행하면

+0

나는 당신의 제안에 해결책을 얻지 못하고 있음을 인정해야합니다. 내가 제공 한 코드를 사용하여 예제를 제공 할 수 있습니까? – sgunnars

+0

위의 Arun의 의견을 확인하십시오. 루프에서 실행중인 코드는 무엇입니까? – tonytonov

+0

나는 나의 예제가하려고하는 것을 정확히하려고 노력하고있다. 각 제조사가 자체 서브셋을 가지고 mpg의 서브셋을 얻는다. 그런 다음 하위 집합의 열을 그래프로 표시하고 제조업체별로 그래프를 내 보냅니다. – sgunnars

4

,이 시도 : 당신이 당신의 최종 목표에 정교한 경우

#e.g. unique models per manufacturer 
dt[,unique(model),by="manufacturer"] 

#or with dplyr (same result) 

require(dplyr) 
dt %.% group_by(manufacturer) %.% summarise(unique(model)) 

    manufacturer   unique(model) 
1   audi      a4 
2   audi    a4 quattro 
3   audi    a6 quattro 
4  chevrolet  c1500 suburban 2wd 
5  chevrolet    corvette 
6  chevrolet  k1500 tahoe 4wd 
7  chevrolet     malibu 
8   dodge   caravan 2wd 
9   dodge  dakota pickup 4wd 
10  dodge   durango 4wd 
11  dodge ram 1500 pickup 4wd 
12   ford   expedition 2wd 
13   ford   explorer 4wd 
14   ford  f150 pickup 4wd 
15   ford    mustang 
16  honda     civic 
17  hyundai     sonata 
18  hyundai    tiburon 
19   jeep  grand cherokee 4wd 
20 land rover   range rover 
21  lincoln   navigator 2wd 
22  mercury  mountaineer 4wd 
23  nissan     altima 
24  nissan     maxima 
25  nissan   pathfinder 4wd 
26  pontiac    grand prix 
27  subaru   forester awd 
28  subaru   impreza awd 
29  toyota   4runner 4wd 
30  toyota     camry 
31  toyota   camry solara 
32  toyota    corolla 
33  toyota land cruiser wagon 4wd 
34  toyota  toyota tacoma 4wd 
35 volkswagen     gti 
36 volkswagen     jetta 
37 volkswagen    new beetle 
38 volkswagen     passat