R로 작성한 script에서 가끔 복잡한 설정들 읽어야 할 때가 있습니다. 여러 방법을 사용할 수 있겠지만 설정파일을 만들어 놓고 읽어서 사용하는 방식을 선호하는데 예전에는 json 포맷을 설정으로 쓰다가 너무 너저분해서 이번에 yaml으로 바꿔봤습니다.
R이 너저분해지는 이유가 이런 종류의 tree 구조의 파일을 읽어서 자료구조로 바꿀때 R에서는 list 타입을 사용해서 맵핑하게 되는데 list의 하위 아이템이 1개인 경우 다른 랭귀지와는 많이 다르게 굉장히 복잡해 집니다. 이렇게 복잡한 이유가 R에는 모든 데이터타입이 기본적으로 vector 취급되기 때문입니다.
그런데 yaml을 사용해보니 json을 사용할 때보다는 데이터타입을 훨씬 잘 변환해 주는 것 같습니다.
패키지는 yaml을 설치해서 사용하면됩니다.
전체 코드는 아래에 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# 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 파일의 내용
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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보다는 훨씬 쓰기도 편하고 좋은것 같습니다.