首页 > 解决方案 > 没有其他包中的类的定义

问题描述

我在大型代码库中遇到了一个奇怪的问题,无法真正弄清楚从哪里开始调试。长话短说,有第三方包,我们会打电话fooDESCRIPTION

Package: foo
Type: Package
Title: Foo
Version: 0.1.0
Author: Foo Dev
Maintainer: Foo Dev <foo@foo>
Description: Does foo
License: MIT
Encoding: UTF-8
LazyData: true
RoxygenNote: 7.1.2

NAMESPACE

# Generated by roxygen2: do not edit by hand

exportClasses(FooA)
exportClasses(FooB)

和代码

#' @export
setClass("FooA", representation())

#' @export
setClass("FooB", representation())

我在另一个包中使用这个包,我们称之为bar

Package: bar
Type: Package
Title: Bar
Version: 0.1.0
Author: Bar Dev
Maintainer: Bar Dev <bar@bar>
Description: Does bar
License: BSD
Encoding: UTF-8
LazyData: true
RoxygenNote: 7.1.2
Imports:
  foo

我在哪里定义以下泛型

#' @name bar
#' @rdname bar
setGeneric(
  "bar",
  function(fooa, foob) { standardGeneric("bar") })


#' bar
#'
#' @param fooa FooA
#' @param foob FooB
#' @name bar
#' @rdname bar
#' @aliases bar,FooA,FooB-method
#' @export
setMethod(
  "bar",
  signature(fooa = "FooA", foob = "FooB"),
  function(fooa, foob) {

  }
)

我检查了包裹和繁荣,我得到:

Found the following significant warnings:
  Warning: in method for ‘bar’ with signature ‘fooa="FooA",foob="FooB"’: no definition for classes “FooA”, “FooB”

如果我改为signature例如

  signature(fooa = "FooA", foob = "ANY"),

或者

  signature(fooa = "ANY", foob = "FooB"),

事情进展顺利。我还可以定义各种泛型,只要它们当时只调度其中一个类。

我使用R version 4.1.1 (2021-08-10), 如果这在这里相关。

这里发生了什么?

标签: rs4

解决方案


推荐阅读