3

問題

以下の図は、私の問題を示しています。

ここに画像の説明を入力

別のパッケージの参照クラスを拡張する参照クラスClassBを作成しようとしています。PackageBClassAPackageA

がインスタンス化されるとすぐに、R はプライベート (エクスポートされていない) オブジェクト (特に関数)が見つからないとClassB文句を言います。PackageA

最小限の作業例 (MWE)

次の図は、MWE がどのように機能するかを示しています。

ここに画像の説明を入力

ClassAの2つのプライベート関数に依存しますPackageAfractionsfrom 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    
4

0 に答える 0