R 의 함수 aliasing (별명)

R 2015. 8. 6. 21:29




R에서 함수의 aliasing(별명)을 더하기 위해서, 함수의 정의에 <-를 하나 더 붙이면 된다.


add_POST <- search_POST <- function(url, path, index=NULL, type=NULL, args, body) {

#...

}



이제, add_POST와 search_POST는 동일한 함수이다.

'R' 카테고리의 다른 글

[R] stop() 함수와 에러 처리 방법  (0) 2015.08.11
[R] List Iterator  (0) 2015.08.06
[R] rjson으로 data frame 으로 만들기  (0) 2015.08.05
[R] 리눅스 (Red-hat 계열) 모듈 설치  (0) 2015.08.05
[R] null/na 체크 (is null)  (0) 2015.08.04
Posted by '김용환'
,



R의 rjson 모듈을 이용하면 JSON의 값을 가지고 data.frame으로 변환할 수 있다.

이를 위해서는 rbind라는 함수를 이용하면 된다. 


<예제>


library(rjson)

json_body <- fromJSON('[ 

                      {"name": "Samuel", "rank": 1},

                      {"name": "Laba", "rank": 2},

                      {"name": "Oppa", "rank": 3}

                      ]')

data_frame = as.data.frame(do.call(rbind, json_body))

data_frame




<결과>


> data_frame

    name rank

1 Samuel    1

2   Laba    2

3   Oppa    3

> typeof(data_frame)

[1] "list"

> class(data_frame)

[1] "data.frame"





'R' 카테고리의 다른 글

[R] List Iterator  (0) 2015.08.06
R 의 함수 aliasing (별명)  (0) 2015.08.06
[R] 리눅스 (Red-hat 계열) 모듈 설치  (0) 2015.08.05
[R] null/na 체크 (is null)  (0) 2015.08.04
[R] HTTP Client - httr  (0) 2015.08.03
Posted by '김용환'
,



Mac의 R은 RStudio 덕분에 모듈 설치가 쉬웠으나, Linux(Red-hat계열)에서 모듈 설치는 조금 신경써야 한다.
R  모듈을 설치하기 전에 *-devel (예, glic-devel, libstdc++=devel, mysql-devel )을 먼저 설치할 필요가 있다.

리눅스에 R 모듈을 설치할 때, 미러링 싸이트에 접속이 안될 수 있어서, repository를 미리 결정하는 것이 좋다.  이를 위해 install.packages() 함수의 repos 설정을 하고, source 컴파일을 하는 게 쉽게 설치하는 것이 좋은 것 같았다.

install.packages()함수를 호출하면 매번 설치하기 때문에, 이미 설치 여부를 확인하고 설치하는 코드를 넣는다. 
이미 설치된 모듈 리스트를 보려면, installed.packages() 를 호출한다. 이미 설치된 모듈이면, 설치하지 않도록 할 수 있다. 

다음은 설치를 진행하는 install.R 코드이다. 

<install.R>
import <-function(lib_name) {
  if(lib_name %in% rownames(installed.packages()) == FALSE) {
      install.packages(lib_name, repos="http://cran.rstudio.com/", type="source")
  }
}

import("rjson")
import("RMySQL")
import("Matrix")
import("rredis")
import("foreach")
import("doSNOW")
import("data.table")


리눅스에서 R을 실행할 때는 다음과 같이 실행한다. Jenkins나 crontab에서 잘 동작하니 유용하다. (미리 sudo yum install R 로 설치한 후에 사용할 수 있다.)


$ Rscript install.R


'R' 카테고리의 다른 글

R 의 함수 aliasing (별명)  (0) 2015.08.06
[R] rjson으로 data frame 으로 만들기  (0) 2015.08.05
[R] null/na 체크 (is null)  (0) 2015.08.04
[R] HTTP Client - httr  (0) 2015.08.03
R에서 한줄 읽기 (readline)  (0) 2015.08.01
Posted by '김용환'
,

[R] null/na 체크 (is null)

R 2015. 8. 4. 23:56


R에서 null object 개념이 있는데, vector에서 NA(Not available), vector가 아닌 경우에 NULL이 쓰이는 듯 하다.

NA체크는 is.na() 함수로, NULL 체크는 is.null() 함수로 체크한다.



예제 1) data frame에 NA가 있으면 0으로 치환하는 코드이다


<코드>


library(Matrix)

df <- data.frame(matrix(sample(c(NA, 1:10), 25, replace = TRUE), 5))

df[is.na(df)] <- 0


<결과>


> df <- data.frame(matrix(sample(c(NA, 1:10), 25, replace = TRUE), 5))

> df

  X1 X2 X3 X4 X5

1  2 10  6  6 NA

2  3  5 10  5 NA

3 10  7  6  6  2

4  3  2  1  3  4

5  3  7  6  4  6

> df[is.na(df)] <- 0

> df

  X1 X2 X3 X4 X5

1  2 10  6  6  0

2  3  5 10  5  0

3 10  7  6  6  2

4  3  2  1  3  4

5  3  7  6  4  6



예제 2) data frame의 특정 컴럼의 값이 NA이면 0으로 변경한다.


rank_value <- scores["data",]$total
if (is.na(rank_value)) {
    rank_value <- 0

}


예제 3) 만약 단순한 null 체크라면 다음과 사용할 수 있다.


<코드>


is.defined_function = function(x) { !is.null(x) }

df

is.defined_function(df)

xxxx

is.defined_function(xxxx)



<결과>

> is.defined_function = function(x) { !is.null(x) }
> df
  X1 X2 X3 X4 X5
1  2 10  6  6  0
2  3  5 10  5  0
3 10  7  6  6  2
4  3  2  1  3  4
5  3  7  6  4  6
> is.defined_function(df)
[1] TRUE
> xxxx
에러: 객체 'xxxx'를 찾을 수 없습니다
> is.defined_function(xxxx)
Error in is.defined_function(xxxx) : 객체 'xxxx'를 찾을 수 없습니다


'R' 카테고리의 다른 글

[R] rjson으로 data frame 으로 만들기  (0) 2015.08.05
[R] 리눅스 (Red-hat 계열) 모듈 설치  (0) 2015.08.05
[R] HTTP Client - httr  (0) 2015.08.03
R에서 한줄 읽기 (readline)  (0) 2015.08.01
R에서 파일 쓰기 (write)  (0) 2015.08.01
Posted by '김용환'
,

[R] HTTP Client - httr

R 2015. 8. 3. 20:21



R에는 httr 이라는 HTTP Client api가 존재한다. keep-alive를 지원하며, 때에 따라 성능이 빠르다.


예제 1)- get

library(httr) 

r <- GET("http://www.naver.com")

r$status_code

r$cookies

r$request



예제 2)- post


#install(httr)

library(httr) 


user <- "samuel"

password <- "sam8a2" 

POST(url = 'http://localhost/login',      

config = c(authenticate(user, password, "basic"), 

add_headers(Connection = "keep-alive"),

accept_json()),      

body = "{'auth-key:'sadfasdf1231'}"

)



'R' 카테고리의 다른 글

[R] 리눅스 (Red-hat 계열) 모듈 설치  (0) 2015.08.05
[R] null/na 체크 (is null)  (0) 2015.08.04
R에서 한줄 읽기 (readline)  (0) 2015.08.01
R에서 파일 쓰기 (write)  (0) 2015.08.01
R 리스트 인덱스  (0) 2015.07.31
Posted by '김용환'
,


R에서 한 줄 읽어 문자열로 변환하는 함수가 있다. readline() 이지, readLine() 이 아니다.. (;;;)


예제 1

> readline("Do you like coffee?")

Do you like coffee?n

[1] "n"



예제 2

fun <- function() {

  ANSWER <- readline("Do you like coffe? ")

  if (substr(ANSWER, 1, 1) == "y")

    cat("YOU LIED!\n")

  else

    cat("YOU LIED NOT!\n")

}

if(interactive()) fun()


결과 화면

Do you like coffe? y

YOU LIED!

'R' 카테고리의 다른 글

[R] null/na 체크 (is null)  (0) 2015.08.04
[R] HTTP Client - httr  (0) 2015.08.03
R에서 파일 쓰기 (write)  (0) 2015.08.01
R 리스트 인덱스  (0) 2015.07.31
[R] matrix 클래스에서 열과 행의 이름을 변경하는 예제  (0) 2015.07.31
Posted by '김용환'
,

R에서 파일 쓰기 (write)

R 2015. 8. 1. 11:05


R 언어에서 파일에 간단한 문자열을 저장하기 위해서 write() 함수를 사용한다.


line="{\"name\":\"Jason\"}"

write(line,file="complete.tmp",append=TRUE)



결과는 다음과 같다.


$ cat complete.tmp

{"name":"Jason"}



반대로, 문자열을 읽으려면 readLines() 함수를 사용한다. (참고로 read() 함수가 없다.;;)



readLines("complete.tmp")


결과는 다음과 같다.


[1] "{\"name\":\"Jason\"}"



참고로, readline()는 콘솔로 입력을 받는 함수이다. 


참고로 datatable을 저장/읽기를 위해서는 write.table(), read.table() 함수를 호출한다.

read.XXX, write.XXX 포맷(예, csv)이 있으니 맞는 api를 활용할 수 있다. 



Posted by '김용환'
,

R 리스트 인덱스

R 2015. 7. 31. 20:13


R의 리스트의 인덱스 예제이다. 

R 리스트의 시작은 0이 아닌 1이다. 

1부터 length 까지 하니 제대로 동작한다. (파스칼 같은 느낌!!) length 이상으로 접근하면 NA가 발생한다. 



소스

servers[0]

servers[1]

servers[length(servers)]

servers[length(servers) + 1]





예제

> servers[0]

character(0)

> servers[1]

[1] "green01"

> servers[length(servers)]

[1] "green02"

> servers[length(servers) + 1]

[1] NA


Posted by '김용환'
,





R에서 matrix에서 열과 행의 이름을 변경하는 예제이다. rownames()와 colnames()를 활용한다.



m2 <- cbind(1,1:4)

typeof(m2)

class(m2)

m2

colnames(m2) <- c("C1","C2")

m2

colnames(m2) <- paste("MAX", colnames(m2), sep = "_")

m2

rownames(m2) <- c("R1", "R2", "R3", "R4")

m2

rownames(m2) <- c("R1", "R2", "R3", "R4", "R5")





결과 

(개수가 안맞으면 에러가 발생한다.)

> m2 <- cbind(1,1:4)

> typeof(m2)

[1] "double"

> class(m2)

[1] "matrix"

> m2

     [,1] [,2]

[1,]    1    1

[2,]    1    2

[3,]    1    3

[4,]    1    4

> colnames(m2) <- c("C1","C2")

> m2

     C1 C2

[1,]  1  1

[2,]  1  2

[3,]  1  3

[4,]  1  4

> colnames(m2) <- paste("MAX", colnames(m2), sep = "_")

> m2

     MAX_C1 MAX_C2

[1,]      1      1

[2,]      1      2

[3,]      1      3

[4,]      1      4

> rownames(m2) <- c("R1", "R2", "R3", "R4")

> m2

   MAX_C1 MAX_C2

R1      1      1

R2      1      2

R3      1      3

R4      1      4

> rownames(m2) <- c("R1", "R2", "R3", "R4", "R5")

Error in `rownames<-`(`*tmp*`, value = c("R1", "R2", "R3", "R4", "R5")) : 

  'dimnames'의 길이 [1]가 배열의 크기와 같지 않습니다




Posted by '김용환'
,


R에서 Json을 만들 때 key값에 quote(")를 써도 되고 안써도 된다.



x <- list(id = 10,

          name = "Samuel",

          phone = "0101111123"

          )

x


json <- toJSON( x )

json


[1] "{\"id\":10,\"name\":\"Samuel\",\"phone\":\"0101111123\"}"



결과는 동일하다.


x <- list("id" = 10,

          "name" = "Samuel",

          "phone" = "0101111123"

          )

x


json <- toJSON( x )

json


[1] "{\"id\":10,\"name\":\"Samuel\",\"phone\":\"0101111123\"}"





그러나  = 대신 콜론(:) 을 쓰면 에러가 발생한다.


> x <- list("id" : 10,

+           name = "Samuel",

+           phone = "0101111123"

+           )

Error in "id":10 : 인자의 값이 NA/NaN 입니다.

추가정보: 경고메시지(들): 

강제형변환에 의해 생성된 NA 입니다 

Posted by '김용환'
,