ANIb_percentage_identity.tab 파일을 R로 읽어들여서 데이터프레임(data)을 만들었다. 다음으로 컬럼을 원하는 순서대로 정렬하기 위하여 dRep에서 만들어진 secondary clustering 결과에서 균주 명칭을 뽑은 뒤 이를 별도의 리스트에 넣었다. 이를 drep_order라 하자. 다음과 같이 치면 row는 원래대로이지만 column은 drep_order에 정의된 순서대로 정돈이 된다.
> data_new = data[, drep_order]처음에는 이렇게 간단한 방법을 몰라서 무식하게도 for 구문을 사용했었다. 부끄러운 고백이지만 어제부터 방법을 찾다가 이 쉬운 기법을 오늘 발견하였다. 독학으로 R을 배우다 보면 늘 느끼는 것이지만 깨진 접시 모양으로 어딘가 이빨이 빠진 구석이 있다. 체계적인 학습이 되지 않았다는 것이다. 그런데 실행을 해 보면 이상하게도 그런 컬럼이 없다는 에러 메시지가 나오는 것이었다.
> data[,"Paenibacillus_peoriae_FSL_F8-0551"]
Error in `[.data.frame`(data, , "Paenibacillus_peoriae_FSL_F8-0551") :
undefined columns selected
철자가 틀린 것이 없는데 왜 그럴까? 별의별 방법을 다 동원하여 컬럼 이름을 확인해 보니 43개 중에서 30개만 반환이 된다. 결국은 왜 이러한 불일치가 벌어졌는지를 알아낼 수 있었는데, 바로 파일을 데이터프레임으로 읽어들이면서 마이너스 기호('-')가 자동으로 마침표('.')로 바뀐 때문이었다. 이렇게 허탈할 데가 있나...
이렇게 자동적으로 변환을 하는 이유는 잘 모르겠다. 원본에 충실하게 읽어들이려면 read.table(x,...,check.names=FALSE)로 바꾸어야 한다. read.csv() 함수에서도 마찬가지이다. 컬럼 이름은 문법적으로도 맞아야 하고(그래서 마이너스 기호를 싫어하는지도 모른다) 중복이 되지 않는지도 따져야 한다. 한편으로는 수긍이 가는 정책이다. Row name은 건드리지 않으니 다행이다.
check.names 인자를 수정하여 파일을 읽어들였더니 컬럼 이름이 원본 파일에 있는 그대로 반영이 되었다. 이렇게 또 한 가지를 배웠다.
댓글 없음:
댓글 쓰기