2017-12-04 19 views
1

내 코드의 효율성과 관련하여 질문이 있습니다. 내 환경에는 9 개의 데이터 프레임이 있으며 각각에 대해 동일한 단계를 수행해야합니다. (데이터 만 프레임의 두 가지에 대해 표시) 단계 및 코드는 다음과 같습니다어떻게 코드를 R에서보다 효율적으로 만들 수 있습니까? 반복적입니다.

CDL <- aggregate(A$Frequency, by=list(Category=A$Words), FUN=sum) 
wordcloud(words = CDL$Category, freq = CDL$x, min.freq = 2, 
     max.words=250, random.order=FALSE, rot.per=0.35, 
     colors=brewer.pal(6, "Dark2")) 

Ltd <- aggregate(B$Frequency, by=list(Category=B$Words), FUN=sum) 
wordcloud(words = Ltd$Category, freq = Ltd$x, min.freq = 2, 
     max.words=250, random.order=FALSE, rot.per=0.35, 
     colors=brewer.pal(6, "Dark2")) 

내가 먼저, 모두 같은 단어를 집계 자신의 주파수를 요약하고 집계 된 결과를 바탕으로 세계 클라우드를 만들 수 있습니다.

환경의 개체 이름은 'A'부터 시작하여 'I'까지 계속됩니다. 변수 'Frequency'는 숫자 일 뿐이며 변수 'Words'에는 단어 목록이 포함됩니다. , 구름에 대한

: 변수 '종류'는 '단어'변수에서 가져온 고유의 단어가 포함되어 은 'X'는 내가 할 수있는 어떤 식 으로든 '주파수'

에서 가져온 주파수의 집계 합이된다 내 코드를 반복하지 않고 동일하게 수행합니까? 감사합니다

답변

2

내가 실수하지 않는다면, 함수를 정의하고 루프가 작동해야합니다!

word_cloud <- function(df) { 
    temp <- aggregate(df[,"Frequency"], by=list(Category=df[,"Words"]), FUN=sum) 
    result <- wordcloud(words = temp[,"Category"], 
    freq = temp[,"x"], 
    min.freq = 2, 
    max.words=250, 
    random.order=FALSE, 
    rot.per=0.35, 
    colors=brewer.pal(6, "Dark2")) 
    return(result) 
} 

input_list <- list(A,B,C,D,E,F,G,H,I) 

for (df_inp in input_list) { 
    word_cloud(df_inp) 
} 

wordcloud()의 출력 모드를 모르기 때문에 결과를 목록에 저장하거나 플롯 할 수 있습니다! 도움이 되었길 바래요!

+1

'for' 루프 대신'apply' 패밀리를 사용하면 루프가 더 잘 수행 될 것입니다. 'output_list <- lapply (input_list, word_cloud)' – LAP

+0

월드 클라우드의 출력은 나타나는 이미지를 보여줍니다. 이미지의 'R Graphics : Device 2 (Active)'라고 말합니다. 코드가 제대로 작동했지만 문제는 각 이미지가 나타나고 다음 이미지가 이전 이미지를 대신 처리한다는 것입니다. 다음 이미지를 표시하기 전에 이미지를 저장할 시간이 충분하지 않습니다. 일반적으로 이미지를 저장하려면 파일을 클릭해야합니다. – Syed

+0

그래픽을 생성하기 전에'png()'를 사용하여 출력 그래픽 파일을 설정하고 나중에 파일을 닫으려면'dev.off()'를 사용할 수 있습니다. –