'Program > R' 카테고리의 다른 글

[초급 #2] package 관리  (0) 2017.01.11
[초급 #1] 설치하고 기본 설정하기  (0) 2017.01.10

팩키지에 대해 조금 설명해 두자면 R은 초급을 넘어서면 팩키지의 싸움이라고 한다.

XBox 같은 게임기를 사거나 닌텐도 같은 게임기를 사면 결국 나중은 게임팩의 싸움이 아닌가...

얼마나 다양한 게임이나 컨텐츠의 팩을 보유하고 있는냐에 따라 재미나게 이용을 할 수 있듯이 R에서 팩키지의 개념도 동일하다.

그래서 R의 패키지 종류에 대해 얼마나 다양하게 알고 있으며, 얼마나 적재적소에 잘 가져다 쓰는게 관건이라고 한다.

R의 팩키지는 셀 수 없을 정도로 많다고 들 하는데, 그게 R이 free다 보니 여러사람이 쓰게 되고 java나 R을 잘 쓰는 사람이 필요한 팩키지를 만들어서 등록할 수 있도록한다. 그말은 결국 아무나 팩키지를 만들어서 간단한 절차를 따르면 팩키지를 R에 등록할 수 있다는 말이다. 

이렇게 많은 팩키지가 있으니 장점이 될 수도 단점이 될수도... 양날의 검이 될 수 있다는 말이다.

또한 누군지도 모르는 사람이 멋진 팩키지를 만들어 주어서 정말 좋긴하나 그 팩키지가 문제가 있다면 그건 사용자가 감수해야 하는 점이... 누군가 무료로 열심히 만들었는데 그 사람에게 책임을 물을 수도 없거니와 문제가 있으면 안쓰면 그만이지가 될 여지가 있으니 처음 사용하게 되는 팩키지인 경우는 다각도로 테스트를 해보고 실 적용을 하는 편이 안전할 듯하다.

기본적으로 많이 알려지고 많이 쓰고 있는 팩키지들은 어느정도 사람들에 의해 검증이 되었다고 하니 문안하게 쓸 수 있지 않을까 하는 생각 또한 할 수 있고....

그래서 팩키지를 설치하고 불러들이고 제거 하는 부분에 대해서 적어둔다.

1. 팩키지 설치하기 

  - install.packages("팩키지명")

    R 콘솔에 명령어를 치면 아래와 같이 팝업창 같은 선택하는 창이 뜨는데 이건 어느 미러 사이트에서 팩키지를 다운받을 지를 선택하는 창이라고 생각하면 된다.

    한국 사이트가 제일 속도면에서는 빠를텐데 처음 창 리스트에서는 한국이 나오지 않는다. 그래서 제일 아래 (HTTP mirrors)를 누르면 옆에 창처럼 새로 창이 뜨면서 리스트에 한국이 나온다.  그 한국 중에 하나를 선택하면 설치가능하다.

    다운을 받으면서 아래와 같이 PC에 설치를 한다.

    만약에 설치하다가 에러가 나는 경우는 거의 대부분이 java의 경로를 못찾거나 java를 설치 안했거나 bit를 제대로 확인하지 않고 설치를 했거나... java로 인한 문제이다.

   그렇다면 PC의 환경변수에 java경로를 확인해 주거나 'JAVA_HOME' 으로 환경변수를 만들어서 java 경로를 설정해주면 해결이 가능하다. 보통 에러문구가 정확히 나오지 않기 때문에 java 부터 확인하는게 빠르다.


2. 팩키지 업데이트

  - update.packages("팩키지이름")


3. 팩키지 삭제

  - remove.packages("팩키지이름")


4. 팩키지 로드하기

  - library("팩키지이름")


  - require("팩키지이름")




'Program > R' 카테고리의 다른 글

dplyr  (0) 2017.01.12
[초급 #1] 설치하고 기본 설정하기  (0) 2017.01.10

1. R을 설치하려면 R 프로그램과 java를 다운로드

* 다운로드 링크 : http://www.r-project.org ,  http://www.java.com/ko

- R

 : 좀 더 쉽게 접근할 수 있는 R-스튜디어가 있으나 처음 접근은 R 콘솔로 접근해서 전체를 아는게 나을 듯함.

   라이센스는 FREE라고 생각하고 쓰면 됨. 따로 금액적인 건 없음. 다운로드는 미러사이트인 cran 링크로 들어가서 최신

   파일을 다운 받음

- java

 : R을 사용하면 java 의존성이 있어서 PC에 java가 설치되어 있어야함. 버전은 상관없으나 해당 PC의 운영 bit 일치 필요.

   PC가 64bit인 경우에 32bit java를 설치하면 R이 실행하면서 에러 남. 설치하는 PC에 따라 확인해서 설치해야 함.


2. R과 Java 설치

- R 

  : 설치할 때 오른 클릭으로 관리자권한으로 실행해서 설치. 

   다른 부분은 그냥 넘어가고 아래 구성요소 설치 시에는 PC의 bit를 하나만 선택하고 4번째 요소도 반드시 설치.

- Java

 : 별다른 변경 없이 다음으로 설치


3. R 초기 편리한 설정 팁

- 실행 시 관리자 권한으로 실행. 가끔 문제가 되는 경우가 생겨서 처음 실행 시 관리자 권한으로 실행.

- 기본 폴더 설정. 보통 작업할 폴더를 설정. 그렇지 않으면 매번 기본 폴더를 설정해 줘야하는 번거로움이 있음.

  매번 번거로우시려면 R 실행 후 'setwd("작업경로및폴더")'.

'Program > R' 카테고리의 다른 글

dplyr  (0) 2017.01.12
[초급 #2] package 관리  (0) 2017.01.11
dom4j를 이용하여 쉽게 XML을 파싱 할 수 있습니다.
[ 예제 코드 ]
import java.net.URL;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
public class Foo {
    public Document parse(URL url) throws DocumentException {
        SAXReader reader = new SAXReader();
        Document document = reader.read(url);
        return document;
    }
}


Iterator 사용하기
"document"(SAXReader나 DocumentHelper를 통해 만들어진 XML객체)는 자바의 표준 Iterator를 이용하여 다양한 방법으로 네비게이션 할 수 있다.
[ 예제 코드 ]
public void bar(Document document) throws DocumentException {

        Element root = document.getRootElement();

        // 루트 엘리먼트의 자식노드 반복
        for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
            Element element = (Element) i.next();
            // do something
        }

        // 루트의 엘리먼트 중 "foo"라는 이름을 갖는엘리먼트의 자식노드 반복
        for ( Iterator i = root.elementIterator( "foo" ); i.hasNext(); ) {
            Element foo = (Element) i.next();
            // do something
        }

        // 루트의 어트리뷰트 반복
        for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {
            Attribute attribute = (Attribute) i.next();
            // do something
        }
     }

XPath를 이용한 강력한 네비게이션
dom4j의 XPath 표현들로 document 트리 내 어떤 노드들도 접근할 수 있다.(Attribute, Element or ProcessingInstruction).
복잡한 네비게이션을 한줄로 할 수 있다.

[ 예제 코드 ]
public void bar(Document document) {
    List list = document.selectNodes( "//foo/bar" );
    Node node = document.selectSingleNode( "//foo/bar/author" );
    String name = node.valueOf( "@name" );
}

XHTML 문서의 링크 네이게이션 예

[ 예제 코드 ]
public void findLinks(Document document) throws DocumentException {
    List list = document.selectNodes( "//a/@href" );
    for (Iterator iter = list.iterator(); iter.hasNext(); ) {
        Attribute attribute = (Attribute) iter.next();
        String url = attribute.getValue();
    }
}

XPath를 배우려면 Zvon tutorial 튜토리얼 참조하세요.  


빠른 반복

커다란 XML tree 전체 iterator를 만들어 가면서 네비게이션 하려면 성능이 떨어지기 때문에 빠른 반복을 할 수 있는 메소드를 사용한다. (treeWalk를 주목)
[ 예제 코드 ]
public void bar(Document document) {
    List list = document.selectNodes( "//foo/bar" );
    Node node = document.selectSingleNode( "//foo/bar/author" );
    String name = node.valueOf( "@name" );
}
public void treeWalk(Document document) {
    treeWalk( document.getRootElement() );
}
public void treeWalk(Element element) {
    for ( int i = 0, size = element.nodeCount(); i < size; i++ ) {
        Node node = element.node(i);
        if ( node instanceof Element ) {
            treeWalk( (Element) node );
        }
        else {
            // do something....
        }
    }
}

새 XML문서 생성
[ 예제 코드 ]
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
public class Foo {
    public Document createDocument() {
        Document document = DocumentHelper.createDocument();
        Element root = document.addElement( "root" );
        Element author1 = root.addElement( "author" )
            .addAttribute( "name", "James" )
            .addAttribute( "location", "UK" )
            .addText( "James Strachan" );
        
        Element author2 = root.addElement( "author" )
            .addAttribute( "name", "Bob" )
            .addAttribute( "location", "US" )
            .addText( "Bob McWhirter" );
        return document;
    }
}


문서를 파일로 쓰기
Document나 어떤 노드에서도 write()메소드를 이용하여 FileWriter로 쓸수 있다.
FileWriter out = new FileWriter( "foo.xml" );
document.write( out );
XMLWriter를 이용하여 출력 포맷을 변경할 수 있다.


[ 예제 코드 ]
import org.dom4j.Document;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
public class Foo {
    public void write(Document document) throws IOException {
        // lets write to a file
        XMLWriter writer = new XMLWriter(
            new FileWriter( "output.xml" )
        );
        writer.write( document );
        writer.close();

        // Pretty print the document to System.out
        OutputFormat format = OutputFormat.createPrettyPrint();
        writer = new XMLWriter( System.out, format );
        writer.write( document );
        // Compact format to System.out
        format = OutputFormat.createCompactFormat();
        writer = new XMLWriter( System.out, format );
        writer.write( document );
    }
}

Document를 문자열로 문자열을 Document로
Document나 어떤 노드에서나 asXML()메소드를 호출하여 쉽게 xml문자열을 추출할 수 있다.
Document document = ...;
String text = document.asXML();    

또한 valid한 xml문자열을 DocumentHelper를 이용하여 Document 객체로 만들수 있다.

String text = "<person> <name>James</name> </person>";
Document document = DocumentHelper.parseText(text);
XSLT를 이용한 문서 스타일 적용
Sun의 JAXP API를 사용하여 쉽게 XSLT를 적용할 수 있다.
Xalan, SAXON과 같은 어떠한 XSLT을 가지고도 작업 할수 있다.


[ 예제 코드 ]
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import org.dom4j.Document;
import org.dom4j.io.DocumentResult;
import org.dom4j.io.DocumentSource;
public class Foo {
    public Document styleDocument(
        Document document,
        String stylesheet
    ) throws Exception {
        // load the transformer using JAXP
        TransformerFactory factory = TransformerFactory.newInstance();
        Transformer transformer = factory.newTransformer(
            new StreamSource( stylesheet )
        );
        // now lets style the given document
        DocumentSource source = new DocumentSource( document );
        DocumentResult result = new DocumentResult();
        transformer.transform( source, result );
        // return the transformed document
        Document transformedDoc = result.getDocument();
        return transformedDoc;
    }
}

'Program > Java' 카테고리의 다른 글

ToStringBuilder  (0) 2010.01.05
annotation API 한글  (0) 2009.12.27
애노테이션 기반 스케줄링  (0) 2009.12.27
스프링 3.0의 MVC 간편화  (0) 2009.12.27
어노테이션을 이용한 설정1 - context:annotation-config  (0) 2009.12.27

+ Recent posts