こにしき(言葉・日本社会・教育)

関西学院大学(2016.04~)の寺沢拓敬のブログです(専門:言語社会学)。

リスト形式のオブジェクト重複を削除する

リスト形式をtransactions形式に変換する際、重複があるとエラーを吐き出すらしい。
(こちらのページを参考にさせていただきました。多謝。→http://d.hatena.ne.jp/hiru926/20100103/1262508600


というわけで、ヘルプなどを探し回たんだけど、私の「検索力」が足りないせいか、さっぱり見つからず。
なので、プログラムを書いたほうが早いと開き直り、以下のような感じで作ってみました。
「いったい誰がこんな関数を使うんだ」というツッコミは甘んじて受けます(笑)
というか、これ用の関数ってどれなんだろう....

myfunc <- function(x.list) {                   # リスト形式のデータを用意
  x <- NULL
    for(i in 1:length(x.list) )
     x[[i]] <- names( table( x.list[[i]] ) )   # 集計してラベルを取り出す
     return(x)
}

使用例

> x.list <- list(                     # 重複のあるリスト形式
   c( "春夫" , "夏子" , "秋子" , "冬美" ),
   c( "春夫" , "秋子" , "冬美" ),
   c( "一郎" , "夏子" , "秋子" , "二郎" ),
    c( "冬美" , "夏子" , "夏子" , "一郎" ) ) # ←「夏子」が重複!

> as(x.list, "transactions")
 以下にエラー validObject(.Object) : 
   不正なクラス "ngCMatrix" オブジェクト:  slot i is not *strictly* increasing inside a column
# このままだとエラーが吐き出される


> x.list <- myfunc(x.list)    # myfunc をかませて、重複を削除
> as(x.list, "transactions")
transactions in sparse format with
 4 transactions (rows) and
 6 items (columns)

 # 変換成功!