Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R软件包和S4对象:“;找不到继承的方法";错误_R_Oop_S4 - Fatal编程技术网

R软件包和S4对象:“;找不到继承的方法";错误

R软件包和S4对象:“;找不到继承的方法";错误,r,oop,s4,R,Oop,S4,我正在编写我的第一个R包,并且正在为S4中的继承和方法定义而挣扎。我使用的是标准的包组织(usethis::create\u package()) 我在文件R/set class.R中定义了这个类: #' @title The Set class #' @slot ris A 2-column character dataframe #' @slot tfs A character vector of TF names #' @import dplyr #' @export setClass(

我正在编写我的第一个R包,并且正在为S4中的继承和方法定义而挣扎。我使用的是标准的包组织(
usethis::create\u package()

我在文件
R/set class.R
中定义了这个类:

#' @title The Set class
#' @slot ris A 2-column character dataframe 
#' @slot tfs A character vector of TF names
#' @import dplyr
#' @export
setClass(
  "set",
  slots = list(
    ris = "data.frame",
    tfs = "character"
  )
)
#' @title Constructor function of a set object.
#' @description Constructor function of a set object.
#' @param ris A 2-column character dataframe of TF-gene interactions.
#' @param tfs A character vector of TF names.
#' @return A `set` object.
#' @export
set <-  function(ris, tfs) {
  new("set", ris = ris, tfs = tfs)
}
#' @name get_tfs
#' @aliases get_tf,set-method
#' @param x A `set` object
#' @docType methods
#' @rdname set-methods
#' @return A character vector
setGeneric("get_tfs",
           valueClass = "character",
           function(x){
             standardGeneric("get_tfs")
           }
)
setMethod(
  "get_tfs",
  signature(x = "set"),
  function(x) {
    x@tfs
  }
)
现在,我构建一个“set”对象并尝试使用以下方法:

> test <- set(ris, tfs)
> is(test)
[1] "set"
> get_tfs(test)
Error in (function (classes, fdef, mtable)  : 
  unable to find an inherited method for function ‘get_tfs’ for signature ‘"set"’
完整的代码可用

免责声明:这不是一个完整的解决方案,但可能帮助您解决问题,不适合作为评论

所以,你链接到的GitHub回购非常复杂,我无法让它工作。因此,我所做的是启动一个没有任何内容的新包,然后将代码添加到单个R文件
R/set.R

当我尝试记录和构建时,它不喜欢这样,因为
set方法
没有标题。我还注意到没有
@export
标签。因此,我在完整文件中添加了以下两个内容:

#' @title The Set class
#' @slot ris A 2-column character dataframe
#' @slot tfs A character vector of TF names
#' @import dplyr
#' @export
setClass(
    "set",
    slots = list(
        ris = "data.frame",
        tfs = "character"
    )
)
#' @title Constructor function of a set object.
#' @description Constructor function of a set object.
#' @param ris A 2-column character dataframe of TF-gene interactions.
#' @param tfs A character vector of TF names.
#' @return A `set` object.
#' @export
set <-  function(ris, tfs) {
    new("set", ris = ris, tfs = tfs)
}

#' @title Placeholder title.
#' @name get_tfs
#' @aliases get_tf,set-method
#' @param x A `set` object
#' @docType methods
#' @rdname set-methods
#' @return A character vector
#' @export
setGeneric("get_tfs",
           valueClass = "character",
           function(x){
               standardGeneric("get_tfs")
           }
)
setMethod(
    "get_tfs",
    signature(x = "set"),
    function(x) {
        x@tfs
    }
)
#@title集合类
#“@slot”是一个2列字符的数据帧
#“@slot tfs TF名称的字符向量
#“@import dplyr”
#“@出口
setClass(
“设置”,
插槽=列表(
ris=“data.frame”,
tfs=“字符”
)
)
#“@title构造函数是一个集合对象的函数。
#'@description集合对象的构造函数。
#@param-ris是TF基因相互作用的两列字符数据框。
#“@param tfs TF名称的字符向量。
#“@返回一个`set`对象。
#“@出口

设置为这样,我们需要一些信息来诊断这个问题,但没有。您的
命名空间是什么样子的?在哪里定义了
set()
?您采取了哪些步骤来构建和安装该软件包?等等。FWIW,在包的上下文之外运行代码对我来说很好(除了将
set(…)
更改为
new(“set”),…)
Hi,经过一番努力,我似乎找到了问题的根源:在我的库中,我定义了另一类对象,而另一类有一个同名的方法“get\tfs”,当我对它进行评论时,问题就消失了。所以现在我重命名了其中一个方法。但是我觉得R应该能够根据输入的类应用这两个方法中的任何一个?也许我仍然缺少一些约定。
#' @title The Set class
#' @slot ris A 2-column character dataframe
#' @slot tfs A character vector of TF names
#' @import dplyr
#' @export
setClass(
    "set",
    slots = list(
        ris = "data.frame",
        tfs = "character"
    )
)
#' @title Constructor function of a set object.
#' @description Constructor function of a set object.
#' @param ris A 2-column character dataframe of TF-gene interactions.
#' @param tfs A character vector of TF names.
#' @return A `set` object.
#' @export
set <-  function(ris, tfs) {
    new("set", ris = ris, tfs = tfs)
}

#' @title Placeholder title.
#' @name get_tfs
#' @aliases get_tf,set-method
#' @param x A `set` object
#' @docType methods
#' @rdname set-methods
#' @return A character vector
#' @export
setGeneric("get_tfs",
           valueClass = "character",
           function(x){
               standardGeneric("get_tfs")
           }
)
setMethod(
    "get_tfs",
    signature(x = "set"),
    function(x) {
        x@tfs
    }
)
library(set)
ris <- data.frame(1)
tfs <- "a"
test <- set(ris, tfs)
is(test)
# [1] "set"
get_tfs(test)
# [1] "a"