2016-10-09 4 views
0

я определил функцию члена для S4 класса (язык программирования R), который, как предполагается, добавлять элементы в список, но он ничего не делает:R S4 класса, функция-член не имеет никакого эффекта

setClass("ListHolder", 
representation(
    .list = "list" 
), 
prototype(
    .list = list() 
)) 
setGeneric("add", 
function(this,i) standardGeneric("add") 
) 
setMethod("add", 
signature(this="ListHolder",i="numeric"), 
definition = function(this,i){ 

    k <- length([email protected]) 
    [email protected][[k+1]] <- i 
}) 

testListHolder <- function(){ 

    lh <- new("ListHolder") 
    for(i in 1:10) add(lh,i) 
    print([email protected]) 
} 

testListHolder() 

Это будет напечатайте пустой список. Что здесь происходит?

ответ

1

добавить функция проблема: то, что вы хотите сделать, это передача объекта ListHolder в функцию и изменить его, что R не поддерживает.

Таким образом, в вашем коде выше:

  1. setMethod:оных (Object, я), добавить return(this) заявление в конце функции добавить.
  2. testListHolder: заменить lh после добавить, for(i in 1:10) lh <- add(lh,i)

EDIT: также проверить this (используйте функцию изменения объекта) вопрос

+0

@Xiatao Ло: спасибо, что помогает. – gcc

 Смежные вопросы

  • Нет связанных вопросов^_^