3

tmパッケージ内の tf-idf 加重関数の変更に関する自分の質問を解決しようとしています: https://stackoverflow.com/questions/15045313/ching-tf-idf-weight-function-weight-not-by-occurrences-期間中の数による

そうすることで、TermDocumentMatrixweightTfIdfに次のコードを含む関数を見ています。m

cs <- col_sums(m)

rs <- row_sums(m)

row_sumsしかし、関数またはのドキュメントが見つかりませんcol_sums。それらを使用して独自の重み付け関数を作成しようとすると、エラーが発生します。Error in weighting(x) : could not find function "col_sums"

これらの関数はどこで定義されていますか?

R以下から完全な機能情報を貼り付けました。

function (m, normalize = TRUE) 
{
    isDTM <- inherits(m, "DocumentTermMatrix")
    if (isDTM) 
        m <- t(m)
    if (normalize) {
        cs <- col_sums(m)
        if (any(cs == 0)) 
            warning("empty document(s): ", paste(Docs(m)[cs == 
                0], collapse = " "))
        names(cs) <- seq_len(nDocs(m))
        m$v <- m$v/cs[m$j]
    }
    rs <- row_sums(m > 0)
    if (any(rs == 0)) 
        warning("unreferenced term(s): ", paste(Terms(m)[rs == 
            0], collapse = " "))
    lnrs <- log2(nDocs(m)/rs)
    lnrs[!is.finite(lnrs)] <- 0
    m <- m * lnrs
    attr(m, "Weighting") <- c(sprintf("%s%s", "term frequency - inverse document frequency", 
        if (normalize) " (normalized)" else ""), "tf-idf")
    if (isDTM) 
        t(m)
    else m
}
<environment: namespace:tm>
attr(,"class")
[1] "WeightFunction" "function"      
attr(,"Name")
[1] "term frequency - inverse document frequency"
attr(,"Acronym")
[1] "tf-idf"
4

1 に答える 1

15

探している機能がslamパッケージに含まれています。はインポートされるだけで、依存関係ではないためslam、ドキュメントを表示するには少し手間がかかります。これは、それを理解し、ドキュメントを参照する方法のセッションの例です。

> # I'm assuming you loaded tm first
> library(tm)
> # See if we can view the code
> col_sums
Error: object 'col_sums' not found
> # Use getAnywhere to grab the function even if the function is 
> # in a namespace that isn't exported
> getAnywhere("col_sums")
A single object matching ‘col_sums’ was found
It was found in the following places
  namespace:slam
with value

function (x, na.rm = FALSE, dims = 1, ...) 
UseMethod("col_sums")
<environment: namespace:slam>
> # So the function is in the slam package
> slam::col_sums
function (x, na.rm = FALSE, dims = 1, ...) 
UseMethod("col_sums")
<environment: namespace:slam>
> # We can tell help to look in the slam package now that we know
> # where the function is from    
> help(col_sums, package = "slam")
> # alternatively
> library(slam)
> ?col_sums
> # If we want to view the actual code for col_sums we need to 
> # do a little work too
> methods("col_sums")
[1] col_sums.default*               col_sums.simple_triplet_matrix*

   Non-visible functions are asterisked
> # We probably want the default version?  Otherwise change to the other one
> getAnywhere("col_sums.default")
A single object matching ‘col_sums.default’ was found
It was found in the following places
  registered S3 method for col_sums from namespace slam
  namespace:slam
with value

function (x, na.rm = FALSE, dims = 1, ...) 
base:::colSums(x, na.rm, dims, ...)
<environment: namespace:slam>

したがって、このcol_sums関数は基本関数 colSums の単なるラッパーです。

于 2013-02-24T19:40:39.073 に答える