Цикл по переменным в динамически созданном классе S4 в R - PullRequest
0 голосов
/ 30 июня 2018

Я работаю с программой на 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
   }
}

Возможно ли это? Спасибо за любую помощь.

1 Ответ

0 голосов
/ 04 июля 2018

Если объект x имеет динамически сгенерированный класс, и вы хотите применить someFun к каждому слоту и сохранить результаты, вы можете выполнить цикл следующим образом:

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

Вы используете эту slotApply функцию аналогично другим * применяемым функциям:

> 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

> 
...