問題
以下の図は、私の問題を示しています。
別のパッケージの参照クラスを拡張する参照クラスClassB
を作成しようとしています。PackageB
ClassA
PackageA
がインスタンス化されるとすぐに、R はプライベート (エクスポートされていない) オブジェクト (特に関数)が見つからないとClassB
文句を言います。PackageA
最小限の作業例 (MWE)
次の図は、MWE がどのように機能するかを示しています。
ClassA
の2つのプライベート関数に依存しますPackageA
(fractions
from import
-ed package MASS
、およびそれ自体PrivateFunc
内で定義されてPackageA
います)。ClassB
も、 の継承を通じて、暗黙的にこれらの関数に依存しますClassA
。
インスタンス化されるとすぐに、見つからないClassB
というエラーが発生します。PrivateFunc
これらのエラーは、ビルド時に発生しますPackageB
。
コード:
##########################################
# PackageA
### R/PackageA.R ###
#' @import methods MASS
PrivateFunc <- function(...) fractions(0.5) # try a function from MASS
#' @export ClassA
#' @exportClass ClassA
ClassA <- setRefClass("ClassA",
methods = list(
initialize = function(...) PrivateFunc()
)
)
### DESCRIPTION: ###
Package: PackageA
...
Imports: methods, MASS
### NAMESPACE: ###
# Generated by roxygen2 (4.0.1): do not edit by hand
export(ClassA)
exportClasses(ClassA)
import(MASS)
import(methods)
##########################################
# PackageB
### R/PackageB.R ###
#' @import methods PackageA
#' @export ClassB
#' @exportClass ClassB
ClassB <- setRefClass("ClassB", contains = "ClassA")
#' @export ClassBInstance
ClassBInstance <- ClassB() # <- Error here!!
### DESCRIPTION: ###
Package: PackageB
...
Imports: methods, PackageA
### NAMESPACE: ###
# Generated by roxygen2 (4.0.1): do not edit by hand
export(ClassB)
exportClasses(ClassB)
export(ClassBInstance)
import(PackageA)
ビルドしようとしたときのエラーPackageB
:
==> devtools::document(roclets=c('rd', 'collate', 'namespace'))
Updating PackageB documentation
Loading PackageB
Error in .Object$initialize(...) : could not find function "PrivateFunc"
Error: Failure in roxygen block beginning PackageB.R:2
using 'as.environment(NULL)' is defunct
Execution halted
Exited with status 1.
==> Rcmd.exe INSTALL --no-multiarch --with-keep.source PackageB
* installing to library .../R/R-3.1.0/library'
* installing *source* package 'PackageB' ...
** R
** preparing package for lazy loading
Error in .Object$initialize(...) : could not find function "PrivateFunc"
Error : unable to load R code in package 'PackageB'
ERROR: lazy loading failed for package 'PackageB'
* removing '.../R/R-3.1.0/library/PackageB'
* restoring previous '.../R/R-3.1.0/library/PackageB'
Exited with status 1.
何がうまくいかないのですか?
追加情報
version
_
platform x86_64-w64-mingw32
arch x86_64
os mingw32
system x86_64, mingw32
status
major 3
minor 1.0
year 2014
month 04
day 10
svn rev 65387
language R
version.string R version 3.1.0 (2014-04-10)
nickname Spring Dance