R언어에서 문자열을 합치는 함수는 paste 이다.  특이한 점은 문자열을 합칠 때, 공백(white space)이 들어가는 부분이 존재한다.


> hello <- "hello"
> x2 <- paste("\"", hello ,"\"")
> x2
[1] "\" hello \""



paste에는 합칠 때 문자열을 따로 정의하는데, sep 매개변수가 바로 그 때 사용된다. sep 매개변수의 디폴트 값이 " " 이기 때문에 앞의 예제에서는 공백이 들어갔다. sep="" 매개변수를 넣으면, 의도대로 동작한다.



> x1 <- paste("\"", hello,"\"", sep="")

> x1

[1] "\"hello\""




이와 똑같은 함수는 paste0이다. 공백이 없는 문자열 합치기라는 의미가 있다.


> x3 <- paste0("11", "gg")

> x3

[1] "11gg"

Posted by '김용환'
,




R에서 foreach 패키지를 설치하면 자동으로 iterators 패키지도 설치한다.


> install.packages("foreach")



also installing the dependency ‘iterators’


URL 'https://cran.rstudio.com/bin/macosx/mavericks/contrib/3.2/iterators_1.0.7.tgz'을 시도합니다

Content type 'application/x-gzip' length 309613 bytes (302 KB)

==================================================

downloaded 302 KB


URL 'https://cran.rstudio.com/bin/macosx/mavericks/contrib/3.2/foreach_1.4.2.tgz'을 시도합니다

Content type 'application/x-gzip' length 382114 bytes (373 KB)

==================================================

downloaded 373 KB




1. Iterator 

iterator를 사용하는 예제이다. loop를 종료하는 조건이 특이하다.

library(iterators)


name = c("A", "B", "C", "D")

itr <- iter(name)

while (TRUE) {

  d = try(nextElem(itr))

  print(d)

  if (class(d) == "try-error") break

}




결과는 다음과 같다.


[1] "A"

[1] "B"

[1] "C"

[1] "D"

Error : StopIteration

[1] "Error : StopIteration\n"

attr(,"class")

[1] "try-error"

attr(,"condition")

<simpleError: StopIteration>



주의 할 점은 break 라인이다. 만약 아래 줄이 없으면, 무한 루프에 빠진다. 

 if (class(d) == "try-error") break




2. foreach


foreach는 do와 같이 써서, 아래 doSNOW를 설치한다.


> install.packages("doSNOW")



그리고, 아래 예제를 실행한다.


> foreach(i = 1:3) %do% {sqrt(i)}

[[1]]

[1] 1


[[2]]

[1] 1.414214


[[3]]

[1] 1.732051




참고 자료. 

http://www.exegetic.biz/blog/2013/11/iterators-in-r/

http://www3.nd.edu/~steve/computing_with_data/21_looping/looping_iterators_part1.html

Posted by '김용환'
,



list를 data.frame의 새로운 컬럼으로 추가하는 예제이다. 



> num.iters <- 5

> list1 <- vector('list', num.iters) 

> for (i in 1:num.iters) {

+   list1[[i]] <- as.integer(2)

+   names(list1)[i] <- paste('XX', i, sep='.')

+ } 

 

> do.call(cbind, list1) 

     XX.1 XX.2 XX.3 XX.4 XX.5

[1,]    2    2    2    2    2

> df <- data.frame(x<-rep.int(1, 5))

> df$xx <- sapply(list1, as.numeric)

> str(df) #숫자인지 판별.

'data.frame': 5 obs. of  2 variables:

 $ x....rep.int.1..5.: num  1 1 1 1 1

 $ xx                : num  2 2 2 2 2

> rowSums(df)

[1] 3 3 3 3 3

> max(df)

[1] 2





주의 할 점은 하나의 컬럼으로 합칠 때, as.numeric대신 paste0 함수를 사용하면 character가 만들어진다.!! 


>df$xx <- sapply(list1, as.numeric)

> str(df) #숫자인지 판별.

'data.frame': 5 obs. of  2 variables:

 $ x....rep.int.1..5.: num  1 1 1 1 1

 $ xx                : num  2 2 2 2 2




> df$xx <- sapply(list1, paste0)

> str(df) #숫자인지 판별.

'data.frame': 5 obs. of  2 variables:

 $ x....rep.int.1..5.: num  1 1 1 1 1

 $ xx                : chr  "2" "2" "2" "2" ...




Posted by '김용환'
,

[R ] = 과 <- 의 차이

R 2015. 7. 16. 21:24


난 R의 =과 <- 이 동일한 줄 알았는데.. =에서는 최상위 레벨에서만 사용가능하다!!


http://stat.ethz.ch/R-manual/R-patched/library/base/html/assignOps.html


The operators <- and = assign into the environment in which they are evaluated. The operator <- can be used anywhere, whereas the operator = is only allowed at the top level (e.g., in the complete expression typed at the command prompt) or as one of the subexpressions in a braced list of expressions.


Posted by '김용환'
,




> # 1-10까지의 숫자 10개를 채워주는 하나의 list 생성

> mylist3 <- list(x <- 1:10)

> mylist3

[[1]]

 [1]  1  2  3  4  5  6  7  8  9 10


> # 하나의 값(0)으로 10개를 채워주는 하나의 list 생성

> mylist1 <- list(rep(0, 10))

> mylist1

[[1]]

 [1] 0 0 0 0 0 0 0 0 0 0


> length(mylist1)

[1] 1

> # 하나의 값(0)을 가진 10개의 list를 생성

> mylist2 <- as.list(rep(0, 10))

> mylist2

[[1]]

[1] 0


[[2]]

[1] 0


[[3]]

[1] 0


[[4]]

[1] 0


[[5]]

[1] 0


[[6]]

[1] 0


[[7]]

[1] 0


[[8]]

[1] 0


[[9]]

[1] 0


[[10]]

[1] 0


> length(mylist2)

[1] 10

> # 1-10까지의 숫자 10개를 채워주는 하나의 list 생성

> mylist3

[[1]]

 [1]  1  2  3  4  5  6  7  8  9 10


> mylist3 <- list(x <- 1:10)

> length(mylist3)

[1] 1



Posted by '김용환'
,

[R] Mariadb 연동 및 이슈

R 2015. 7. 14. 21:48



2015.7.14 현재

R에서 mariadb 연동하기 위해 RMysql을 대신 쓰고 있다. 기본적인 동작은 잘 된다. 큰 문제 없이 잘 작동하고 있다.

https://github.com/rstats-db/RMySQL



<설치>


install.packages("RMySQL")  


<설정>


library(RMySQL)



con <- dbConnect(MySQL(), user="abc", password="aaa")

dbReadTable(con, "read_stats")

...


그러나, dbWriteTable() function  사용시, mariadb를 쓰면서 발생하는 부분이 존재한다. RMysql 쪽에서 수정해줄 지 모르겠지만, 이슈 리포트를 했다. 그리고, 나는 간단하게 insert 문으로 해결하여 사용하고 있다. 


dbWriteTable(con, value = read_stats, name = "scores", append = TRUE)

> dbWriteTable(con, value = read_stats, name = "cores", append = TRUE)
Error in .local(conn, statement, ...) : 
  could not run statement: The used command is not allowed with this MariaDB version


https://github.com/rstats-db/RMySQL/issues/79


Posted by '김용환'
,





R에서 data.table 또는 data.frame 의 모든 데이터를 insert into.. on duplicate key update를 사용할 수 있다.


query <- paste(

  'insert into scores (name, total) values',

  paste(sprintf("('%s', %f)", score$name, score$total), collapse=', '),

  'on duplicate key update name = values(name), total = values(total)',

  sep = ' '

)

dbGetQuery(con, query)


'R' 카테고리의 다른 글

[R] 특정 값으로 채우는 list 생성하기  (0) 2015.07.16
[R] Mariadb 연동 및 이슈  (0) 2015.07.14
Rstudio startup(실행)시 무한 루프시 해결  (0) 2015.07.13
[R] mysql 연동하기  (0) 2015.07.09
[R] 동작시간 측정하기  (0) 2015.07.09
Posted by '김용환'
,




mac에서 Rstudio startup(실행)시 무한 루프가 발생하여 실행이 안되는 문제가 갑자기 발생했다.

정확한 이유를 몰라서, 기본 설정 파일을 지웠다가, 다시 실행하니 잘 동작된다.


$ rm -rf .rstudio-desktop/


'R' 카테고리의 다른 글

[R] Mariadb 연동 및 이슈  (0) 2015.07.14
[R] insert into .. on duplicate key update.. 사용하기  (0) 2015.07.14
[R] mysql 연동하기  (0) 2015.07.09
[R] 동작시간 측정하기  (0) 2015.07.09
[R]의 SD (Subset of Dataframe)  (0) 2015.07.09
Posted by '김용환'
,

[R] mysql 연동하기

R 2015. 7. 9. 19:47



R에서 mysql을 아주 쉽게 연동할 수 있다.  




설치 

install.packages("RMySQL")  



사용


library(RMySQL)


con <- dbConnect(MySQL(), user="google", password="samuel", dbname="stat", host="stat.intern.google.com")


dbListTables(con)

dbListFields(con, "read_stats")


con %>% dbGetQuery("select count(*) from read_stats")

con %>% dbGetQuery("select * from read_stats limit 10")


read_stats <- data.frame(dbReadTable(con, "read_stats"))


# 작업 : x_stats

dbWriteTable(con, value = read_stats, name = "scores", append = TRUE) 


dbDisconnect(con)




참조

http://www.r-bloggers.com/mysql-and-r/


http://cran.r-project.org/web/packages/RMySQL/RMySQL.pdf



* 참고 

mysql 읽기 전에 미리 csv로 덤프 뜬 샘플 파일로 테스트해보는 것이 좋다. 배치로 쓸 때, mysql을 사용한다.

read_stats <- fread("/Users/Samuel/read_stats.csv")



mariaDB에서는 2015년 7월 현재 dbWriteTable을 지원하지 않았다. github 쪽에다가 요청한 상태이다.
https://github.com/rstats-db/RMySQL/issues/79


Posted by '김용환'
,

[R] 동작시간 측정하기

R 2015. 7. 9. 19:41


*  측정

ptm <- proc.time()


# 로직

x <- 1:100000

for (i in seq_along(x))  x[i] <- x[i]+1


proc.time() - ptm


결과 화면

 사용자  시스템 elapsed 

  0.116   0.003   0.118 



* 블럭 측정

system.time({

  # 로직

  x <- 1:100000

  for (i in seq_along(x))  x[i] <- x[i]+1

})


결과 화면

 사용자  시스템 elapsed 

  0.113   0.007   0.120 



이것 외에 Rprof()도 있다.


https://tgmstat.wordpress.com/2013/09/25/profiling-r-code/

'R' 카테고리의 다른 글

Rstudio startup(실행)시 무한 루프시 해결  (0) 2015.07.13
[R] mysql 연동하기  (0) 2015.07.09
[R]의 SD (Subset of Dataframe)  (0) 2015.07.09
R 공부에 도움되는 책  (0) 2015.07.09
R 설치와 라이센스  (0) 2015.07.08
Posted by '김용환'
,