2017-03-02 2 views
4

파이프를 통해 전달 된 데이터 프레임의 이름을 인쇄하고 싶습니다. 이것이 가능한가? 내가 할 수있는.파이프를 통해 전달 된 데이터 프레임의 이름을 R

printname <- function(df){ 
    print(paste(substitute(df))) 
} 
printname(mtcars) 
#[1] "mtcars" 

그러나 "." 파이프가 magrittr 파이프를 사용하여이 기능을 파이프 할 때. 로그인 생산 공정에 사용되는 기능의 사용자 지정 오류 메시지를 작성할 때

mtcars %>% printname 
# [1] "." 

이 도움이 될 것입니다 - 그것은 뭔가 로그의 유일한 경우 실패 어디 있는지 알고 어렵다 "."

mtcars %>% 조각을 포함하는 원래 호출을 반환하는 것으로 충분할 것입니다.

+0

data.frame의 이름을 모르는 상태에서 어떻게 파이프 라인을 시작합니까? 'get'? 여기서 누락 된 상황이 있습니다. – alistaire

+0

코드를 작성할 때 이름을 알고 있지만 파이프를 통해 호출하는 함수는 이름을 알지 못하므로 유익한 오류를 발생시킬 수 없습니다. 런타임 어설 션을 사용하여 오류의 원인이 된 데이터 프레임의 이름이 포함 된 오류를 발생 시키십시오. –

+0

공정한. 줄 번호가 너무 좋을 것입니다. 이제 생각해 보겠습니다. – alistaire

답변

6

이것은 처음 시도한 것으로 해킹 같지만 작동하는 것처럼 보입니다.

find_chain_parts <- function() { 
    i <- 1 
    while(!("chain_parts" %in% ls(envir=parent.frame(i))) && i < sys.nframe()) { 
      i <- i+1 
     } 
    parent.frame(i) 
} 

printfirstname <- function(df){ 
    ee <- find_chain_parts() 
    print(deparse(ee$lhs)) 
} 

mtcars %>% printfirstname 
# [1] "mtcars" 

pipe 함수 체인 부분을 추적하는 환경을 생성한다. 이 변수를 찾고있는 현재 실행 환경을 걷고 거기에 저장된 lhs 정보를 사용하여 파이프 시작 부분에 기호를 찾으려고했습니다. 이것은 잘 테스트되지 않았습니다.