标签: reference-class

参考类字段消失

我决定给参考课另一个镜头,但我的第一个问候世界已经给了我一些问题.这里出了什么问题?

> memory <- setRefClass(
+   Class = "memory",
+   fields = list(state="vector"),
+   methods = list(
+     get = function() { return(state) },
+     set = function(x) { state <<- x }
+   )
+ )$new()

> memory$set(123)

> print(memory)
Reference class object of class "memory"
Field "state":
[1] 123

> memory$get()
[1] 123

> print(memory)
Reference class object of class "memory"
Field "state":
Error in methods::show(field(fi)) : 
  error in evaluating the argument 'object' in selecting a method for …
Run Code Online (Sandbox Code Playgroud)

r cran reference-class

3
推荐指数
1
解决办法
199
查看次数

R中的通用函数和引用类

我正在阅读Martin Morgan关于参考类的注释,在幻灯片7中,他使用setMethod来定义show函数而不将其先前设置为通用类setGeneric.

为什么允许这样做?是否存在所有引用类声明为通用的方法列表,包括show

r reference-class

3
推荐指数
1
解决办法
507
查看次数

R引用类中是否有析构函数?

就像一个测试:

myclass = setRefClass("myclass",
                       fields = list(
                           x = "numeric",
                           y = "numeric"
                       ))


myclass$methods(
    dfunc = function(i) {
        message("In dfunc, I save x and y...")
        obj = .self
        base::save(obj, file="/tmp/obj.rda")
    }
    )

myclass$methods(
    print = function() {
            if (.self$x > 10) {
                stop("x is too large!")
            }
    message(paste("x: ", .self$x))
    message(paste("y: ", .self$y))
    }
    )

myclass$methods(
    initialize = function(x=NULL, y=NULL, obj=NULL) {
        if(is.null(obj)) {
            .self$x = x
            .self$y = y
        }
        else {
            .self$x = obj$x
            .self$y = obj$y …
Run Code Online (Sandbox Code Playgroud)

r reference-class

3
推荐指数
1
解决办法
618
查看次数

构建定义参考类的R包

我正在创建一个R包。该包定义了几个参考类。这些类之间存在依赖关系,因为一个是基类,其他是子类。由于这种依赖性,必须按一定顺序加载程序包文件:首先加载基类,然后再加载子类。但是,仅凭运气,R首先加载了子类,并抱怨未定义基类。

如何强制以特定顺序执行程序包的源文件?

我当前的“解决方案”是将所有类定义放入一个源文件中,首先定义基类。谈丑。有更好的方法。

r reference-class

2
推荐指数
1
解决办法
352
查看次数

ReferenceClass的`print`方法

我有:

MyClass < - setRefClass("MyClass",fields = list(data ="numeric"))

让我们初始化一个对象MyClass:

OBJ < - MyClass(数据= 1:4)

...并在屏幕上打印:

OBJ

Reference class object of class "MyClass"
Field "data":
[1] 1 2 3 4
Run Code Online (Sandbox Code Playgroud)

我想改变它的打印方式,所以我写了这个方法:

print.MyClass < - function(x){cat("This is printed representation:")print(x $ data)}

现在这个工作:

打印(OBJ)

This is printed representation: [1] 1 2 3 4
Run Code Online (Sandbox Code Playgroud)

这不是:

OBJ

有没有办法只用键入来实现我的打印方法OBJ

我也尝试过show,或者(OBJ),但是对我没有爱.

r reference-class

2
推荐指数
1
解决办法
443
查看次数

``ReferenceClass`的[.`方法

我想[.为我写一个方法ReferenceClass.到目前为止,我有这样的事情:

DT <- data.table(Index=1:5)

MySeries <- setRefClass("MySeries", fields = list(data="data.table"))

setMethod("[","MySeries",function(x, i,j,drop) {
  ii <- substitute(i)
  x$data <- x$data[eval(ii)]
  return(x)
})

S <- MySeries(data=DT)
Run Code Online (Sandbox Code Playgroud)

...但是当我最后打电话时它会抛出一个错误S[Index>3].如何解决上述问题以获得此预期结果?

  Index
4:  4
5:  5
Run Code Online (Sandbox Code Playgroud)

methods eval r s4 reference-class

2
推荐指数
1
解决办法
89
查看次数

使用roxygen2 R CMD检查codoc错配警告记录参考类

我正在尝试使用roxygen2为引用类对象创建文档,但是当我运行R CMD检查时,我不断收到此警告:

  S4 class codoc mismatches from documentation object 'myRefClass-class':
  Slots for class 'myRefClass'
  Code: .xData
  Inherited: .xData
  Docs: field1 field2
Run Code Online (Sandbox Code Playgroud)

这是与上述警告相关的ref class和roxygen2块:

#' @title myRefClass class
#' @description Description of myRefClass
#' @import methods
#' @exportClass myRefClass
#' @slot field1 A character slot
#' @slot field2 A numeric slot
myRefClass<-setRefClass(Class="myRefClass", 
                        fields=list(field1="character", 
                        field2="numeric"))
Run Code Online (Sandbox Code Playgroud)

以下是生成的R文档:

myRefClass-class {testPackaging} R文档myRefClass类

描述

myRefClass的描述

老虎机

field1字符槽

field2数字槽

至于我能找到的文档,codoc正在测试我的代码和文档之间的一致性.据我所知,所有的插槽名称都是一样的; 也许我错过了什么.不确定文档是否应该自动将其标记为引用类,或者我是否应该以某种方式指出?我发现R文档表明插槽".xData用于启用异常类型的继承",但我不确定为什么它适用于我在这里做的或者我应该用它做什么.

我已经尝试了一些roxygen标签的排列并且保持接近这里发现的结构似乎给了我最好的结果/来自R CMD检查的最少警告:Roxygen2 - 如何@export参考类生成器? 我一直在网上寻找roxygen2应该如何与参考类一起使用的例子; 也许我正在寻找错误的地方 - 我运气不好.

我正在使用roxygen2 v 3.1.0/RStudio版本0.98.501/R版本3.0.3/OSX 10.9.2(注意:尝试升级到roxygen2 v 4.0并且它在引用类上完全被阻塞,以至于没有文档存在根本生成)

如果有人知道使用roxygen2和引用类的CRAN包,那么我可能会看到它是如何正确完成的,或者如果有人知道我做错了什么,那么帮助将非常感激.我是R的包装建筑的新手.

documentation r roxygen reference-class roxygen2

2
推荐指数
1
解决办法
1171
查看次数

引用类字段列表中的多个可接受的类

例如:

Mycls = setRefClass(
    "Mycls",
    fields = list(
    # this is just a mock up
    colorvec = "numeric" | "factor" | "matrix"
    )
)
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我想允许colorvec数字或因子或矩阵.有没有办法做到这一点?

r reference-class

2
推荐指数
1
解决办法
293
查看次数

R引用类作为引用类的字段

我想将引用类传递给引用类构造函数,并将传递的引用类指定为字段.但是,当我运行下面的代码时,我不明白为什么会出现错误.我的问题是:

1)请有人可以解释为什么会发生这种错误:

> a <- ClassA&new()
Error in .getClassFromCache(Class, where) : 
  argument "Class" is missing, with no default
> b <- ClassB$new(a)
Error in .Object$initialize(...) : object 'a' not found
Run Code Online (Sandbox Code Playgroud)

2)我已将class.a.container声明为类"list",但我希望这是一个引用类.我需要放在这里而不是"列表"?

ClassA <- setRefClass(
  "ClassA",

  fields = list(myVar = "numeric"),

  methods = list(
    someMethod = function(){
      print("hi")
    }
  )
)

ClassB <- setRefClass(
  "ClassB",

  fields = list(class.a.container = "list"),

  methods = list(
    initialize = function(class.a){
      class.a.container <<- class.a
  })
)

a <- ClassA&new()
b <- ClassB$new(a)
Run Code Online (Sandbox Code Playgroud)

oop r reference-class

1
推荐指数
1
解决办法
872
查看次数

标签 统计

r ×9

reference-class ×9

cran ×1

documentation ×1

eval ×1

methods ×1

oop ×1

roxygen ×1

roxygen2 ×1

s4 ×1