내 패키지 내에서 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.table
에Depends:
귀하의 설명 파일의 필드 또는 II)를 포함data.table
에Imports:
귀하의 설명 파일의 필드와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.frame
data.table
data.frame
is()
data.table
이것은 또한 data.table
상속이 네임 스페이스없는 패키지와 호환되지 않는 이유이며, 사용자 요청시 이러한 패키지의 작성자에게 패키지에 네임 스페이스를 추가하여 호환되도록 요청해야하는 이유이기도합니다. 다행스럽게도 R은 v2.14.0에서 누락 된 패키지에 대한 기본 네임 스페이스를 추가하므로이 문제는 해결되었습니다.
R 버전 2.14.0의 변경 사항
* 모든 패키지에는 네임 스페이스가 있어야하며 소스에 제공되지 않은 경우 설치시 생성됩니다.
다음은 완전한 레시피입니다.
1) 추가 data.table
로 Imports
당신의 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
'Programing' 카테고리의 다른 글
git diff-줄 끝 변경 표시? (0) | 2020.10.30 |
---|---|
사용자가 사용을 거부 한 후 사용자에게 위치 서비스를 켜도록 프롬프트하려면 어떻게해야합니까? (0) | 2020.10.30 |
이미 Eclipse가있는 경우 Maven 또는 Ant가 필요한 이유는 무엇입니까? (0) | 2020.10.30 |
Chocolatey와 NuGet의 차이점 (0) | 2020.10.30 |
C #에서 매일 특정 시간에 메서드를 호출하는 방법은 무엇입니까? (0) | 2020.10.30 |