R言語にて、glmのようなオブジェクトを返せるような関数を定義したいと考えています。たとえば、
R
1> x <- c(4,5,17,17,19,19,29,41,45,47,49,54,56,58,70,76,88,88,93,97) 2> y <- c(0,0,0,0,0,0,1,1,1,0,0,1,1,0,1,1,1,1,1,1) 3> r <- glm(y ~ x, family=binomial(link="logit")) 4> r 5 6Call: glm(formula = y ~ x, family = binomial(link = "logit")) 7 8Coefficients: 9(Intercept) x 10 -3.56668 0.08319 11 12Degrees of Freedom: 19 Total (i.e. Null); 18 Residual 13Null Deviance: 27.53 14Residual Deviance: 15.19 AIC: 19.19
glmオブジェクトの入ったrを参照するだけだと上記の結果が得られますが、
R
1> str(r) 2List of 30 3 $ coefficients : Named num [1:2] -3.5667 0.0832 4 ..- attr(*, "names")= chr [1:2] "(Intercept)" "x" 5 $ residuals : Named num [1:20] -1.04 -1.04 -1.12 -1.12 -1.14 ... 6 ..- attr(*, "names")= chr [1:20] "1" "2" "3" "4" ... 7 $ fitted.values : Named num [1:20] 0.0379 0.0411 0.1041 0.1041 0.1207 ... 8 ..- attr(*, "names")= chr [1:20] "1" "2" "3" "4" ... 9 $ effects : Named num [1:20] -0.11 2.335 -0.27 -0.27 -0.298 ... 10 ..- attr(*, "names")= chr [1:20] "(Intercept)" "x" "" "" ... 11 $ R : num [1:2, 1:2] -1.55 0 -67.84 28.07 12 ..- attr(*, "dimnames")=List of 2 13 .. ..$ : chr [1:2] "(Intercept)" "x" 14 .. ..$ : chr [1:2] "(Intercept)" "x" 15 $ rank : int 2 16 $ qr :List of 5 17 ..$ qr : num [1:20, 1:2] -1.551 0.128 0.197 0.197 0.21 ... 18 .. ..- attr(*, "dimnames")=List of 2 19 .. .. ..$ : chr [1:20] "1" "2" "3" "4" ... 20 .. .. ..$ : chr [1:2] "(Intercept)" "x" 21 ..$ rank : int 2 22 ..$ qraux: num [1:2] 1.12 1.24 23 ..$ pivot: int [1:2] 1 2 24 ..$ tol : num 1e-11 25 ..- attr(*, "class")= chr "qr" 26 27・・・・・・・・・・・ 28 29 $ method : chr "glm.fit" 30 $ contrasts : NULL 31 $ xlevels : Named list() 32 - attr(*, "class")= chr [1:2] "glm" "lm"
rは各種値を含むリストになっており、r$coefficients などとすることで値を参照できることがわかります。
このように、rでの出力とは別に、値そのものを格納しておくにはどのようにしたらよいでしょうか。
以下のコードは実装したいもののイメージのサンプルとなります。
R
1foo <- function(bar) { 2 cat('test') 3 x <- bar 4 y <- list(c(1:9)) 5} 6 7> baz <- foo(0) 8> baz$x
GLMのコード を読み解けるほど堪能ではないため、お力添えいただけますと幸いです。よろしくお願いします。
あなたの回答
tips
プレビュー