2016-07-14 9 views
0

私はかなりRが新しく、さらにS4クラスまで新しく、有効性チェックにいくつかの問題が発生しました。簡単に言えば、動作していません。ここに私のコード:それは私の妥当性機能で定義されてはならないようもののS4クラスの妥当性チェックR

check_filter_type <- function(object) { 
    length_filter_type <- length([email protected]_type) 
    #return("No filter type was specified.") 
    if (length_filter_type == 0L) { 
     return("No filter type was specified.") 
    } 
    possible_filter <- c('cutData', 'generateTimestamps', 
         'loadRawData', 'insertEventEntry', 
         'insertTimestampOffsetEntry', 
         'insertOffsetCorrectedEventEntry') 
    if(!([email protected]_type %in% possible_filter)) { 
     return("An unknown filter type was requested.") 
    } 
    return(TRUE) 
} 

setClass(
    "filterPreProcessing", 
    representation(filter_type = "character"), 
    validity=check_filter_type 
) 

私はFILTER_TYPEとして渡すどのような文字引数は、クラスが作成されます。

filter <- new("filterPreProcessing", filter_type="") 
validObject(filter) 
#[1] TRUE 

filter <- new("filterPreProcessing", filter_type="unknown") 
validObject(filter) 
#[1] TRUE 

私は動作するようになっているか誤解かなり確信しているが、チュートリアルと例の数を見た後、私は私のミスを特定することはできません。

+0

問題を再現できません。 Rセッションを再開し、コードを再度テストしてみてください。 – nrussell

答えて

0

あなたのクラスにジェネリックのジェネリックを書く必要があると思います。あなたがスロットを編集することを決定した場合、クラスを警戒することはありません(下記参照)。

setMethod('initialize', 'filterPreProcessing', 
      function(.Object, filter_type) { 
    [email protected]_type <- filter_type 
    validObject(.Object) 
    return(.Object) 
}) 

クラス内のスロットにアクセスして編集するには、一般的な記述が必要です。

setGeneric('filter_type', function(object) standardGeneric('filter_type')) 
setMethod('filter_type', 'filterPreProcessing', function(object) { 
    return([email protected]_type) 
}) 
setGeneric('filter_type<-', function(object) standardGeneric('filter_type<-')) 
setMethod('filter_type<-', 'filterPreProcessing', 
      function(object, new_filter_type) { 
    [email protected]r_type <- new_filter_type 
    validObject(object) 
    return(object) 
}) 

これを塩の塊で取ります。他の誰かが来て、より良い答えを出さなければならない。

関連する問題