1

パッケージ texreg を使用して、r と latex を使用してさまざまな線形モデルを比較する表を作成しています (このパッケージは初めてです)。このパッケージは非常に便利だと思いますが、RMSE が extract.lm メソッドに含まれていない理由がよくわかりません。

この方法で extract.lm メソッドを変更して、オプションとして含めるようにしました。

extract.lm<-  function (model, include.rsquared = TRUE, include.adjrs = TRUE, include.rmse = TRUE, 
                include.nobs = TRUE, ...) 
      {
        s <- summary(model, ...)
        names <- rownames(s$coef)
        co <- s$coef[, 1]
        se <- s$coef[, 2]
        pval <- s$coef[, 4]
        rs <- s$r.squared
        adj <- s$adj.r.squared
        sig<-s$sigma ##added it
        n <- nobs(model)
        gof <- numeric()
        gof.names <- character()
        gof.decimal <- logical()
        if (include.rsquared == TRUE) {
          gof <- c(gof, rs)
          gof.names <- c(gof.names, "R$^2$")
          gof.decimal <- c(gof.decimal, TRUE)
        }
        if (include.adjrs == TRUE) {
          gof <- c(gof, adj)
          gof.names <- c(gof.names, "Adj. R$^2$")
          gof.decimal <- c(gof.decimal, TRUE)
        }
        if (include.rmse == TRUE) { ##added it
          gof <- c(gof, sig)
          gof.names <- c(gof.names, "RMSE")
          gof.decimal <- c(gof.decimal, TRUE)
        }
        if (include.nobs == TRUE) {
          gof <- c(gof, n)
          gof.names <- c(gof.names, "Num. obs.")
          gof.decimal <- c(gof.decimal, FALSE)
        }
        tr <- createTexreg(coef.names = names, coef = co, se = se, 
                           pvalues = pval, gof.names = gof.names, gof = gof, gof.decimal = gof.decimal)
        return(tr)
      }

次に、コンソールで実行し、検索して、

setMethod("extract", signature=className("lm","stats"), definition=extract.lm, where="package:texreg")

これは、作者がrforgeで提案した方法でもありますが、このエラーがあります

Error in setMethod ...
  the environment "texreg" is locked; cannot assign methods for function

私も fixInNamespace() を試しましたが、ターミナルで名前を挿入するか body() 関数を使用して関数のソースにアクセスできる場合でも、本体関数は表示されません (これは私がアクセスした方法であり、修正しました)。

私の間違いはどこですか?? どうすればこれを作ることができますか?

注: extract は S4 ジェネリックです。

パッケージ環境で、関数を確実にオーバーライドしたいです。

ありがとうございました!

4

1 に答える 1

2

The error is caused by your attempt to overwrite an object in the package environment. I would suggest creating the method in your local environment, which will be given priority by R when you use texreg in conjunction with the extract.lm method:

setMethod("extract", signature = className("lm", "stats"), 
    definition = extract.lm)

See section 6 of the article in the Journal of Statistical Software: http://www.jstatsoft.org/v55/i08/

于 2014-05-20T09:53:27.963 に答える