2015-01-14 2 views
55

magrittr 패키지에 소개 된 파이프 연산자를 사용하여 직접 작성한 패키지 dplyr 데이터 변환을 사용하고 싶습니다. magrittrDESCRIPTION 파일에 Import으로 나열됩니다. , FUNCTIONNAME (매개 변수R : 자체 작성 패키지에서 magrittr 파이프 연산자 사용

오류 : 내 자신의 패키지를로드하고 나는 다음과 같은 오류 메시지가 파이프 - 연산자를 사용하여 기능을 테스트 한 후 기능을 찾을 수 없습니다 "%> %"

함수의 소스 코드에 magrittr::%>%%>%을 변경하면 패키지가 더 이상 빌드 할 수 없습니다 수 있습니다 때문에 도움이되지 않습니다. 당신이 magrittrDepends에 나와 있던 경우에

+0

패키지 내부의 함수 내부에서 파이프 연산자에 대해 조언 할 것입니다. 디버깅을 훨씬 더 어렵게 만듭니다 (호출 스택은 파이프와 함께 아주 깊게됩니다). 패키지의 경우, 임시 변수를 덮어 쓰면 훨씬 쉽게 테스트 할 수 있습니다 (R은 오류가 발생한 줄을 알려줍니다). 이 파이프는 대화 형으로 사용하기에는 좋지만 프로그래밍에 부담이 될 수 있습니다. –

답변

57

그것은 제대로 작동해야합니다. 그러나,이 not advised입니다. 대신에, 당신은 Imports에서 magrittr을 떠나 NAMESPACE에 다음 행을 추가 : 나는 Writing R extensions을 읽어 보시기 바랍니다

importFrom(magrittr,"%>%") 

. 귀하의 질문은 1.1.3 및 1.5.1 항에 설명되어 있습니다.

+1

고마워, 그게 문제를 해결했다. –

+1

@alexanderketh이 경우 답변 옆에있는 녹색 눈금 마크를 눌러 승인 된 것으로 표시해야합니다. SO에 오신 것을 환영합니다! – tonytonov

+31

'roxygen2'를 사용한다면,'roxygenize()'중에 NAMESPACE가 자동으로 채워지도록 importFrom magrittr "%> %"'를 추가 할 수 있습니다. –

20

하나의 추가 솔루션 - roxygen 패키지를 사용하십시오. 이는 devtools 패키지의 일부로 구현되었습니다. devtools이 설치되면 devtools::document()을 호출하면 NAMESPACE이 업데이트됩니다. 또한 문서와 함께 .Rd 파일을 자동 빌드하므로 편리합니다.

#' @import packagename 형식의 특수 주석을 파일에 추가하여 해당 패키지에서 모든 함수를 가져 오거나 #' @importFrom packagename functionname 함수를 가져 오면됩니다. 파일에 원하는만큼 주석을 넣을 수 있으므로 각 파일의 맨 위에 또는 외부 함수가 필요한 각 함수의 세트를 가질 수 있습니다.

그런 다음 devtools::document()을 실행하고 주석을 찾는 코드를 구문 분석 한 다음 적절한 NAMESPACE 파일을 만듭니다. 쉬운.

+0

이렇게하면 R 스크립트의 첫 번째 기능에 대한 도움말 파일과 관련된 다음 산소 설명이 엉망이됩니다. 어떻게 도움말 파일에서 글로벌 산소 코멘트를 분리합니까? – jzadra

+2

나는 일반적으로 각 기능과 함께 가져 오기 주석을 개별적으로 넣습니다. 파일의 다른 기능이 변경되면 가져 오기가 정확합니다. 그래서 세계적인 정의는 없습니다. –

7

당신이 RStudio, 해들리의 devtools 패키지를 사용하고 있다고 가정하고 DESCRIPTION 파일의 가져 오기 섹션에 magrittr을 나열, 여기 내 패키지 기능 (들)에 %>% 작업을하는 데 걸린 단계입니다.

#' Convert \code{data.frame} to \code{list}. 
#' 
#' @importFrom magrittr %>% 
#' @name %>% 
#' @rdname pipe 
#' @export 
#' @param x A \code{data.frame} object. 
#' @examples 
#' my_result <- foo(iris) 
#' 
foo <- function(x) { 
    x %>% 
     as.list() 
} 

둘째, devtools::document()을 실행

첫째, 기능 foo.R 물품.

세 번째로 devtools::load_all()을 실행하십시오.

this과 같은 파일이 R/ 디렉토리에 만들어지고 기능이 예상대로 작동해야합니다.