카테고리 보관물: 컴퓨터언어

RStudio 1.1 릴리즈

지난 10월 9일 RStudio 1.1이 릴리즈되었습니다.

설치를 하고 나면 다크테마로 설정된 달라진 분위기의 애플리케이션 모습을 볼 수 있습니다.

RStudio v1.1

공식 내용은 RStudio blog에서 확인할 수 있습니다.

https://blog.rstudio.com/2017/10/09/rstudio-v1.1-released/

업데이트 내용은

  • 다크테마 지원
  • 데이터베이스 컨넥터 지원 및 탐색 기능
  • 오브젝트 탐색 기능 강화
  • 터미널 탭 지원
  • 기타 소소한 업데이트

입니다.

당연한 것이겠지만 Rstudio server 1.1도 몇가지 기능 개선과 더불어 릴리즈 되었습니다.

 

Ubuntu에 Go 1.8.x 설치하기

Ubuntu에서 다음과 같은 명령으로 go 언어를 설치할 수 있습니다.

sudo apt-get install golang-go

하지만 현재의 최신 버전은 1.8 이상인데 1.6 정도의 조금 오래된 버전이 설치됩니다.
일반적인 작업을 할 때는 1.6도 큰 문제는 없지만 Go 최신 패키지이나 애플리케이션 중에는 1.8 이상에서만 작동하게 제작된 것이 생겨서 반드시 1.8 이상으로 버전업을 해야 할 수 있습니다.
Go언어를 설치할 때 1.6을 설치했다 나중에 업그레이드하면서 속썪이느니 애초에 높은 버전을 설치하는 것이 좋습니다.
Go언어의 최선 버전은 다음과 같이 설치합니다.

sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt-get update
sudo apt-get install golang-go

설치된 버전은 go version 명령으로 확인할 수 있습니다.

go version

위의 결과는 제 환경에서는 다음과 같이 보입니다.
go version go1.8.3 linux/amd64
1.8.3이 설치된 것을 확인했으니 이제 사용하면 됩니다.

R 3.4.1 릴리즈

2017년 6월 30일자로 R 3.4.1 버전이 릴리즈(release) 되었습니다.

패키지 설치시 문제와 펑션에 유니코드가 포함되어 있을 때 디스플레이에서 발생하는 문제를 비롯한 패키지 개발관련의 버그들이 수정되었다고 합니다.

3.4.1의 코드네임은 “Single Candle”입니다. 3.4.0의 코드네임은 “You stupid darkness” 이더군요. R은 늘 코드네임을 이해가 쉽게 안가는 것을 붙이는데 이번에는 코드네임이 왜 이런가 하고 링크를 봤더니 아래의 “피너츠”(찰리브라운과 스누피?) 만화의 대사이더군요.

전 귀찮아서 아직 업그레이드를 안했습니다만…

 

R – yaml 파일 읽어오기

R로 작성한 script에서 가끔 복잡한 설정들 읽어야 할 때가 있습니다. 여러 방법을 사용할 수 있겠지만 설정파일을 만들어 놓고 읽어서 사용하는 방식을 선호하는데 예전에는 json 포맷을 설정으로 쓰다가 너무 너저분해서 이번에 yaml으로 바꿔봤습니다.

R이 너저분해지는 이유가  이런 종류의 tree 구조의 파일을 읽어서 자료구조로 바꿀때 R에서는 list 타입을 사용해서 맵핑하게 되는데 list의 하위 아이템이 1개인 경우 다른 랭귀지와는 많이 다르게 굉장히 복잡해 집니다. 이렇게 복잡한 이유가 R에는 모든 데이터타입이 기본적으로 vector 취급되기 때문입니다.

그런데 yaml을 사용해보니 json을 사용할 때보다는 데이터타입을 훨씬 잘 변환해 주는 것 같습니다.

패키지는 yaml을 설치해서 사용하면됩니다.
전체 코드는 아래에 있습니다.

# install.packages("yaml")
require(yaml)
configuration = yaml.load_file("d:\\workspace\\test_configuration.yaml")

print(configuration)
is(configuration)  # configuration 심볼의 타입 확인

print(configuration$var_0001)  # 각각 하위 요소들의 내용 확인
print(configuration$var_0001$var_0001_01)  # 각각 하위 요소들의 내용 확인

configuration$var_0001$var_0001_01[[1]]  # 이건 여전히 문제
is(configuration$var_0001$var_0001_01[['var_0001_01_01']])
is(configuration$var_0001$var_0001_01[['var_0001_01_02']])

print(configuration$var_0002)
print(configuration$var_0003)
print(is(configuration$var_0003))

test_configuratino.yml 파일의 내용

var_0001:
  var_0001_01:
    var_0001_01_01: "value_0001_01_01"
    var_0001_01_02: "value_0001_01_02"
var_0002:
  - "value0002_1"
  - "value0002_2"
  - "value0002_3"
  - "value0002_4"
  - "value0002_5"
var_0003: True

주의할 것은 하위 항목이 1개인 것은 여전히 [[1]] index를 지정해주지 않으면 안됩니다. 그래도 JSON보다는 훨씬 쓰기도 편하고 좋은것 같습니다.

R – 변수에 값을 넣고 바로 결과를 출력하기

제목대로 입니다. 정말 별것 아닙니다. 아주 가끔 유용하게 쓸 때가 있습니다.

variable <- 2 * 3
(variable <- 2 * 3)

핵심은 2번째 줄입니다.

직접 실행해 보세요.

예전에 어떤 R 전문가들이 모여서 토론하는 메일링리스트에서 저렇게 쓰는 것을 본 적이 있어서 기억하고 있었습니다.

원리는 간단하면서도 오묘한데 R의 구조를 이해하는데도 도움이 됩니다.

R은 값을 가진 symbol이나 값 자체를 호출하게 되면 기본으로 print함수가 호출되어서 심볼의 내용을 출력하게 되어 있습니다. 그런데 <- 나 = 로 변수대입(실제로는 심볼지정)을 하게 되면 print는 기본으로 작동하지 않습니다.

그래서 연산자 심볼인 소괄호로 묶어주면 최종 연산된 값이 리턴되고 바로 print까지 실행됩니다.

저걸 쓸 일이 있겠나 싶겠지만 정말 가끔 쓸 일이 있어요. ^ㅡ^;;;


위에 제가 이해를 위해서 연산자라고 적었는데 오해의 여지가 있지 않을까하는 걱정에 내용을 추가합니다.

R에는 연산자가 없습니다. (아마도…)
다음 코드를 실행하고 결과를 확인해 보세요.

is(`[`)  # 얘는 펑션
`[`

is(`(`)  # 얘도 평션
`(`

is(`<-`)  # 얘도 평션
is(`=`)  # 얘도 평션

is(`]`)  # 하지만 얘는 펑션이 아님
`]`

is(`)`)  # 얘도 아님
`)`

닫는 괄호들은 무슨 타입인지 잘 모르겠지만 함수도 아니고 일반 심볼도 아닙니다.  아마 표현문 종료 기호같은 R 내부에서는 어떻게 취급되는지 모르겠습니다.

다음 코드도 한 번 실행해 보세요.

e <- parse(text="(1+2)")
e[1][[1]][[1]]
e[1][[1]][[2]]
e[1][[1]][[3]]
e[1][[1]][[4]]

결과는 직접 확인해 보세요.
이걸 이해하셨다면 R의 내부구조를 많이 이해한 것이 됩니다.