Post

R function 수정하기 body(), reshape::melt 함수 에러 해결법

하루는 프로그램 돌리고 나온 리스트형 결과를 다시 모아서 그림을 그리려고 melt()함수를 사용했는데 자꾸 warning이 뜨더라..

1
2
3
4
5
6
7
8
9
10
> m.prop = rbind(melt(Est.prop$Est.prop.weighted), melt(Est.prop$Est.prop.allgene))
Warning messages:
1: In type.convert.default(X[[i]], ...) :
  'as.is' should be specified by the caller; using TRUE
2: In type.convert.default(X[[i]], ...) :
  'as.is' should be specified by the caller; using TRUE
3: In type.convert.default(X[[i]], ...) :
  'as.is' should be specified by the caller; using TRUE
4: In type.convert.default(X[[i]], ...) :
  'as.is' should be specified by the caller; using TRUE

구글링을 통해 melt 함수 내에 있는 lapply()as.is=TRUE 로 설정을 바꿔주면 해결된다고 해서

임의로 as.is=TRUE가 포함된 lapply()문으로 수정해 newmelt 함수를 선언해봤다.

R 함수 수정하기

원래 있는 R 함수 수정하려면 body()를 사용하면 된다.

1
2
3
4
5
6
7
newmelt <- reshape::melt.matrix #새로 정의하려는 newmelt 에 원래 melt 복붙

#> body(newmelt)[8][[1]]
#dn[char] <- lapply(dn[char], type.convert) #원래는 이랬었는데

# quote() 사용해서 as.is=TRUE 포함된 버전으로 치환
body(newmelt)[8][[1]] <- quote({dn[char] <- lapply(dn[char], type.convert, as.is = TRUE)})

수정된 newmelt() 사용해서 같은 코드 돌리면 warning message사라진다

끝!

reference

This post is licensed under CC BY 4.0 by the author.

© Subin Cho. Some rights reserved.

Using the Chirpy theme for Jekyll.