天道酬勤,学无止境

s4

Reference Classes, tab completion and forced method definition

问题 我目前正在使用参考类编写一个包。 我在阅读各种资料时遇到了一个问题: R 参考类中的方法初始化 无法在 Snowfall 中可靠地使用 RefClass 方法 我认为是因为引用方法并非全部复制到类中的每个对象,而是在首次访问时复制它们。 https://stat.ethz.ch/pipermail/r-devel/2011-June/061261.html 例如定义: test <- setRefClass("TEST", fields = list( a = "numeric"), methods = list( addone = function(){ a <<- a+1 }, initialize = function(){ a <<- 1 } ) ) example <- test$new() 所以 example 是类TEST的一个新对象。 在控制台中键入example$和制表符会给出 > example$ # example$.->a example$.refClassDef example$.self # example$a example$initialize 因此方法addone不作为选项提供。 但是可以调用: example$addone() 现在标签再次显示 # > # > example # Reference class object of

2022-05-04 05:28:03    分类:技术分享    r   s4   reference-class

Automated porting of R library for Renjin

问题 我有一些本地 R 库,我想将它们包含在我的 renjin Java 应用程序中。 一些库完全用 R 编写,一些库具有 C++ 依赖项,一些库具有 S4 类。 理想情况下,我不想维护每个库的两个副本。 我想知道是否有任何自动化方式来获取本地 R 库(或其源)并生成 Renjin 兼容版本? 回答1 packages.renjin.org 上列出的所有 CRAN 和 Bioconductor 包都被编译为 Java 字节码(包括 C、C++ 和 Fortran 源代码),并通过全自动构建系统从原始源代码打包成 JAR。 Renjin 文档包括为 Renjin 创建包的说明,但对于只有 R 代码的包,与 GNU R 包的区别只是建议的(因此是可选的)目录布局。 要构建您自己的遵循 GNU R 的目录结构约定的 R 包,您必须只添加一个 Maven POM 文件,其中包含有关 R 源文件位置的信息。 例如(注意包名称和版本的占位符): <?xml version="1.0" encoding="UTF-8"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org

2022-04-27 08:10:04    分类:技术分享    r   s4   renjin

Multiple dispatch for `subset` methods in R

I am developing a package and want to write two subset methods for objects of a custom class, myclass, with dispatch on two arguments, first one being the object to subset, of class myclass, and the second being either logical of character vector, like so: setMethod( f = "subset", signature = c(x = "myclass", subset = "logical"), definition = function(x, subset){ # function body } ) setMethod( f = "subset", signature = c(x = "myclass", subset = "character"), definition = function(x, subset){ # different function body } ) However, I cannot do this because the S3 generic dispatches on one

2022-04-27 07:52:59    分类:问答    r   methods   s4

Reference Classes, tab completion and forced method definition

I am currently writing a package using reference classes. I have come across an issue which from reading various sources: Method initialisation in R reference classes Can't reliably use RefClass methods in Snowfall I gather is caused because reference methods are not all copied to every object in the class rather they are copied when first accessed. https://stat.ethz.ch/pipermail/r-devel/2011-June/061261.html As an example define: test <- setRefClass("TEST", fields = list( a = "numeric"), methods = list( addone = function(){ a <<- a+1 }, initialize = function(){ a <<- 1 } ) ) example <- test

2022-04-26 15:09:27    分类:问答    r   s4   reference-class

R: when to use setGeneric or export a s4 method in the namespace

问题 我正在编写一个小型 R 包,并打算将来将其提交给 Bioconductor,这就是我决定尝试 s4 类的原因。 不幸的是,我在理解什么时候应该在我的包中使用 setGeneric 时遇到了问题,而且setGeneric方法的文档对我来说或多或少难以理解。 具体例子: 我创建了一个名为Foo的 s4 类我使用setMethod("[","Foo", ...)为[<-运算符定义了一个方法我使用setMethod("as.list", "Foo",...)为as.list函数定义了一个方法我避免使用setGenerics并在命名空间中导出我的方法,因为我在某处读到已经定义的泛型函数不需要它 现在的问题是[访问器方法就像一个魅力,但as.list不起作用。 更令人困惑的是,当我通过在 R 终端输入library(BiocGenerics)导入库BiocGenerics时, as.list开始工作。 问题 1:我如何确定[将始终有效? 因为我导入了一些库,这不仅仅是巧合? 问题2:我应该怎么做才能使as.list工作? 导出命名空间中的方法? 使用setGeneric吗? 问题 3:我认为as.list开始工作是因为在 BiocGenerics 包中使用了setGeneric("as.list"...) ,但似乎并非如此,从这里阅读:http://www .bioconductor

2022-04-19 09:55:13    分类:技术分享    r   oop   s4   bioconductor

R S4 roxygen2 文档(R S4 roxygen2 documentation)

问题 我在 S4 中使用 roxygen2 作为文档,由于某种原因,使用部分没有出现。 我做了一个简单的例子来说明我的困惑: #' Title #' #' @param x Temp #' #' @return Nothing of interest. #' #' @export #' @docType methods #' @rdname A-methods setGeneric("A", function(x, ...){ cat("test\n") standardGeneric("A") }) #' @rdname A-methods #' @aliases A,ANY,ANY-method setMethod("A", "ANY", function(x, ...){ cat(class(x)) }) #END# 回答1 恕我直言,这是一个常见问题。 您可以尝试使用 roxygen 的s4分支。 (对于我的小包裹,它运作良好。)。 从 github 安装s4分支: library("devtools") install_github("roxygen", "klutometis", ref="s4")

2022-04-18 13:04:26    分类:技术分享    r   documentation   s4   roxygen2

R S4 roxygen2 documentation

I'm using roxygen2 for documentation in S4 and for some reason the usage section is not showing up. I made a simple example to show my confusion: #' Title #' #' @param x Temp #' #' @return Nothing of interest. #' #' @export #' @docType methods #' @rdname A-methods setGeneric("A", function(x, ...){ cat("test\n") standardGeneric("A") }) #' @rdname A-methods #' @aliases A,ANY,ANY-method setMethod("A", "ANY", function(x, ...){ cat(class(x)) }) #END#

2022-04-16 04:20:20    分类:问答    r   documentation   s4   roxygen2

Automated porting of R library for Renjin

I have some local R libraries that I would like include in my renjin Java application. Some of the libraries are written entirely in R, some libraries have C++ dependencies and some libraries have S4 classes. Ideally, I don't want to maintain two copies of each library. I am wondering if there is any automated way to take a local R library(or its sources) and generate a Renjin compatible version?

2022-03-25 06:11:24    分类:问答    r   s4   renjin

How to execute S4 class method in Python (using rpy2)?

I have made the following S4 class in R, its constructor takes a variable called 'A', which is a string. The class has a method called 'test_method', which takes as input a string 'B' and returns whether 'A' equals 'B'. test_class <- setRefClass( "test_class", fields=list(A="character"), methods = list( test_method = function(B) { if (A==B) { return('yes') } else { return('no') } } ) ) Now, I can make an instance of this class and execute 'test_method' on it: object <- test_class(A='hello') object$test_method('hi') This returns 'no', because the strings do not equal. Now I want to save this

2022-03-22 09:25:44    分类:问答    python   r   rpy2   s4