2016-10-09 47 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:加(對象,I),在功能末尾添加return(this)語句添加
  2. testListHolder:更換添加lhfor(i in 1:10) lh <- add(lh,i)

編輯:還要檢查this(使用功能來修改一個對象)的問題

+0

@Xiatao羅:感謝幫助。 – gcc