これは、DFM-クラスのweight
メソッドにオプションを追加するには、このを容易にするために、より重要なのは疎行列からDFMのクラスを削除する必要はありませんを指します。 dfmには、重み付けされた方法の記録を保持するように設計されたオブジェクト内の@weights
スロットもあります。したがって、この情報は保持される必要があります。
@ lukeAのソリューションは、%*%
と<-
に1回ずつ、dfmクラスを2回削除します(彼または自分の過失ではありませんが!!)。最初は、マトリックス乗算%*%
の代わりに、列方向のリサイクルと標準*
を使用することで避けることができます。これは、%*%
のdfm-classのメソッドが書かれていないと思われるためです(これがデフォルトの方法sparseMatrix
です) 。サブ行列要素を再割り当てすると、現在は回避できませんが、dfmクラスのオブジェクトオブジェクトを別のものに置き換えるだけで回避できます。
str <- c("apple is better than banana", "banana banana apple much better")
weights <- c(apple = 5, banana = 3, much = 0.5)
mydfm <- dfm(str, ignoredFeatures = stopwords("english"), verbose = FALSE)
# use name matching for indexing, sorts too, returns NA where no match is found
newweights <- weights[features(mydfm)]
# reassign 1 to non-matched NAs
newweights[is.na(newweights)] <- 1
# works because of column-wise recycling of the vector
mydfm * newweights
## Document-feature matrix of: 2 documents, 4 features.
## 2 x 4 sparse Matrix of class "dfmSparse"
## features
## docs apple better banana much
## text1 5 3.0 5 0
## text2 1 0.5 2 0.5
:
クラスを維持する方法で、新しいDFMクラスのオブジェクトを作成するには、(第2の文書と別の機能を追加することで、ここで私はこの問題は、もう少し複雑になっている)、これはうまくいきます
もう1つ注意してください:列名のようなものを抽出するためにdfm-class固有のメソッドを使用することをお勧めします。 features(mydfm)
ではなく、colnames(mydfm)
となります。
はい、動作します、ありがとう! もう1つの疑問... 1つの列にすべての機能があり、隣接する列にそれぞれの重みがある.csvファイルから重みをインポートしたかったのです。 'ft = data $ features' ' wt = data $ weights' ftおよびwtオブジェクトを使用して、このフォームのベクトルを生成することはできますか?weights < - c( "apple" = 5、 "banana" = 3) –
ようこそ。あなたの質問に: 'weights < - setNames(wt、ft)' – lukeA
'mydfm [、names(weight)]' '名前(重み)'が 'str < - 'の機能のサブセットである場合にのみ機能します。 "'それ以外の場合はエラーとなります。 同じ文字列で 'weights < - c(" apple "= 5、" banana "=" 3 "、" grapes "= 4)'しようとしましたが、このエラーが発生します 'intI(j、n = x @Dim [2]、dn [[2]、give.dn = FALSE): 無効な文字インデックス ' –