在R中动态创建的S4类中循环变量

在R中动态创建的S4类中循环变量,r,loops,dynamic,s4,R,Loops,Dynamic,S4,我正在使用一个R程序,在那里我动态创建了一个S4类。我想以某种方式循环这个类中的每个变量,以写入一个表 classStructure <<- getColumns(jobClass) myclass <- setClass("myclass", slots = classStructure) method <<- setClassMethods() setClassMethods <- function(){ setGeneric("myclass",

我正在使用一个R程序,在那里我动态创建了一个S4类。我想以某种方式循环这个类中的每个变量,以写入一个表

classStructure <<- getColumns(jobClass)
myclass <- setClass("myclass", slots = classStructure)
method <<- setClassMethods()

setClassMethods <- function(){
   setGeneric("myclass",
         def = function(myclassVar, level, outFile){
           standardGeneric("myclassMethod")
         })
   setMethod("myclassMethod", signature = "myclass",
        function(myclassVar, level = classLevel, outFile = logFile){
           # Stuff happens
           # Loop through variables here
           # Write table of class variables to file
   }
}

classStructure如果object
x
有一个动态生成的类,并且您希望将
someFun
应用到每个插槽并保存结果,则可以按如下方式循环:

slotApply <- function(x,FUN,...){
  cl <- class(x)
  result <- list()
  for(i in slotNames(cl)){
    result[[i]] <- FUN(slot(x,i),...)
  }
  result
}

请包括库和可复制的示例数据、任何函数定义等。对于代码调试,请始终根据和标记说明询问示例以及所需的输出。可能是
slotNames(“myclass”)
。下面是一些类结构的示例:类结构谢谢,但我正在尝试找出如何将类结构转换为数据帧格式。您对此有何想法?假设您的意思是类中的每个槽都是结果数据帧的一列,那么您应该能够将对
slotaply
的调用包装为对
as.data.frame
的调用。如果这不起作用,那就意味着内容不适合制作成数据帧(例如,它们的长度不一样)。它也适用于完全没有插槽的类的边缘情况。
> setClass("simpleClass",slots=c(slot1="integer",slot2="numeric")) -> simpleClass
> x <- simpleClass(slot1=1:5,slot2=rnorm(10))
> x
An object of class "simpleClass"
Slot "slot1":
[1] 1 2 3 4 5

Slot "slot2":
 [1]  1.00247979 -1.75796879  0.06510241 -0.53409906  0.85805243 -0.30981176 -1.06817163 -1.45182185  0.09195955  1.17004958

> slotApply(x,sum)
$slot1
[1] 15

$slot2
[1] -1.934229

>