10월, 2016의 게시물 표시

RScript 사용 팁

R의 최대 약점 중 하나는 '멀티쓰레딩'입니다. 작업을 분할해서 하기가 어렵다는 뜻입니다. 연산작업이야 MRO가 알아서 척척 잘 해주니 별 문제가 없는데 웹 크롤링 작업 등을 하려면 아무래도 멀티쓰레딩이 생각납니다. 프로그램을 나만 사용하고, 딱 정해져 있는 목적이 있다면 사실... 멀티쓰레딩보다는 CMD 여러 개 동시에 쓰는 것이 속 편합니다. R을 실행할 때 RStudio를 많이 쓰시지요? 그런데 CMD 환경에서도 R을 쓰려면 불편합니다. Rscript는 이와 같은 문제를 해결하기에 딱입니다. 우선, R의 bin 경로가 Windows의 PATH로 잡혀 있다는 가정 하에... C:\> RScript execution.R 10 20 이렇게 합시다. 다음은 execution.R의 내용입니다. args = commandArgs(trailingOnly = TRUE) a1 = as.numeric(args[1]) a2 = as.numeric(args[2]) cat("The result is",a1+a2,"\n") RScript는 execution.R을 실행합니다. 그리고 10과 20을 각각 첫번째와 두번째 인자로 넘깁니다. R에서 인자들을 받으려면 commandArgs()를 실행합니다. 받을 때는 '문자'로 받습니다. 쉽죠?

웹페이지 읽어오기 가이드

정말 오랫만에 글을 씁니다. 그간 여유가 좀 없었기도 하지만, 코딩할 계기도 별로 없었습니다. 반성... 요즘 논문 작업 때문에 다시 웹을 만지작 거리고 있습니다. 일을 하던 중에 여러분도 잘 모르겠다는 생각이 드는 것이 있어서 그것을 가지고 글을 씁니다. 오늘의 주제는 "User-Agent!". 웹 페이지를 크롤링하면 반드시 User-Agent를 남겨야 합니다. 예의..에 해당되기도 하고 서버에서 여러분을 거부하는 사태를 사전에 조금이나마 막을 수 있는 방법이기도 합니다. R은 여러 패키지로 이루어져 있습니다. 그런데 User-Agent를 컨트롤 하기는 조금 복잡합니다. 웹을 검색해보면 여러 대안들이 나오지만, 엉터리도 좀 있고 해서 제가 정리해보겠습니다. 일단, 여러분 브라우저에 다음과 같이 입력해서 결과를 보세요. http://httpbin.org/user-agent 저 같은 경우에 결과가 {   "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36" } 이렇게 나옵니다. 이것이 User-Agent입니다. R의 httr 페키지는 user_agent를 다루는 함수를 포함하고 있습니다. 예를 들어, R> header = httr::user_agent("Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36") 이렇게 하면 User-Agent를 알려주는 헤더를 작성합니다. GET()명령어를 써서 서버에 request를 합시다. R> request_result = httr::GET("http://www.naver.co