Programing

내 패키지 내에서 data.table 패키지 사용

crosscheck 2020. 10. 30. 07:44
반응형

내 패키지 내에서 data.table 패키지 사용


내 패키지 내에서 data.table 패키지를 사용하려고합니다. MWE는 다음과 같습니다.

작은 data.table 객체를 생성 한 다음 "A"열로 그룹화 한 "Val"열을 합산하는 함수 test.fun을 만듭니다. 코드는

test.fun<-function ()
{
    library(data.table)
    testdata<-data.table(A=rep(seq(1,5), 5), Val=rnorm(25))
    setkey(testdata, A)
    res<-testdata[,{list(Ct=length(Val),Total=sum(Val),Avg=mean(Val))},"A"]
    return(res)
}

일반 R 세션에서이 함수를 만든 다음 함수를 실행하면 예상대로 작동합니다.

> res<-test.fun()
data.table 1.8.0  For help type: help("data.table")
> res
     A Ct      Total        Avg
[1,] 1  5 -0.5326444 -0.1065289
[2,] 2  5 -4.0832062 -0.8166412
[3,] 3  5  0.9458251  0.1891650
[4,] 4  5  2.0474791  0.4094958
[5,] 5  5  2.3609443  0.4721889

이 함수를 패키지에 넣고 패키지를 설치하고 패키지를로드 한 다음 함수를 실행하면 오류 메시지가 표시됩니다.

> library(testpackage)
> res<-test.fun()
data.table 1.8.0  For help type: help("data.table")
Error in `[.data.frame`(x, i, j) : object 'Val' not found

아무도 왜 이런 일이 일어나고 그것을 고치기 위해 할 수 있는지 설명 할 수 있습니까? 어떤 도움이라도 대단히 감사합니다.


Andrie의 추측이 맞습니다, +1. 이에 대한 FAQ (참조 vignette("datatable-faq")) 와 가져 오기에 대한 새로운 비 네트 가 있습니다 data.table.

FAQ 6.9 : data.table에 의존하는 패키지를 만들었습니다. data.frame에서 상속이 작동하도록 내 패키지가 data.table을 인식하는지 어떻게 확인합니까?

어느 내가)를 포함 data.tableDepends:귀하의 설명 파일의 필드 또는 II)를 포함 data.tableImports:귀하의 설명 파일의 필드와 import(data.table)네임 스페이스 파일에.

추가 배경 ... [.data.table(및 기타 data.table기능) 의 맨 위에 .NET을 호출 한 결과에 따라 스위치가 표시됩니다 cedta(). Calling Environment Data Table Aware의 약자입니다. 타이핑 data.table:::cedta은 그것이 어떻게 이루어 졌는지 보여줍니다. 이는 네임 스페이스가있는 호출 패키지에 의존하고, 해당 네임 스페이스 Import'ing 또는 Depend'ing on data.table. 이것은 data.table을 인식하지 않는 패키지 (예 :의 함수)에 data.table전달되는 방법 이며 해당 패키지는에서 절대적으로 표준 구문을 사용할 수 있으며 a 인식하지 못합니다 .base[.data.framedata.tabledata.frame is()data.table

이것은 또한 data.table상속이 네임 스페이스없는 패키지와 호환되지 않는 이유이며, 사용자 요청시 이러한 패키지의 작성자에게 패키지에 네임 스페이스를 추가하여 호환되도록 요청해야하는 이유이기도합니다. 다행스럽게도 R은 v2.14.0에서 누락 된 패키지에 대한 기본 네임 스페이스를 추가하므로이 문제는 해결되었습니다.

R 버전 2.14.0의 변경 사항
* 모든 패키지에는 네임 스페이스가 있어야하며 소스에 제공되지 않은 경우 설치시 생성됩니다.


다음은 완전한 레시피입니다.

1) 추가 data.tableImports당신의 DESCRIPTION파일.

2) @import data.table각각의 .R 파일 (예 : 오류를 발생시키는 함수를 포함하는 .R 파일 )에 추가 합니다 Error in [.data.frame(x, i, j) : object 'Val' not found.

3) library(devtools)R 패키지의 기본 디렉토리를 가리 키도록 작업 디렉토리를 입력 하고 설정하십시오.

4) 유형 document(). 이렇게하면 NAMESPACE파일에 한 import(data.table)줄이 포함 됩니다.

5) 유형 build()

6) 유형 install()

무엇을 build()하고 무엇을하는지에 대한 좋은 입문서는 http://kbroman.org/pkg_primer/를install() 참조하십시오 .

그런 다음 R 세션을 닫고 다음에 로그인하면 다음을 사용하여 즉시 바로 시작할 수 있습니다.

1) 유형 library("my_R_package")

2) 위에서 언급 한 .R 파일에있는 함수 이름을 입력합니다.

3) 즐기십시오! 더 이상 두려운자를받지 말아야합니다Error in [.data.frame(x, i, j) : object 'Val' not found

참고 URL : https://stackoverflow.com/questions/10527072/using-data-table-package-inside-my-own-package

반응형