Rの自分用チップスです。ちょっとずつ増やしていきたいです。
- ベクトルの末尾/先頭N個以外を取り出す
- ベクトルのインデックスベクトルを安全に返す。
- 文字列ベクトルを変形する
- パッケージの関数名一覧を返す。
- Rのベースパッケージを検索する
- summary(lm(...))の係数情報をtibbleへ変換する。
- summary(lm(...))からF-statisticのP値を取得する。
- 文字列ベクトルのmap結果を名前付きリストにする。
- セッションの基本パッケージの関数リストを作成する。
ベクトルの末尾/先頭N個以外を取り出す
#末尾N個より前側 head(1:10, -3) #-> 1:7 #先頭N個より後側 tail(1:10, -3) #-> 4:10
head
/tail
関数の第2引数にマイナスの数を渡すと末尾/先頭N個以外を取り出せます。
- https://search.r-project.org/R/refmans/utils/html/head.html
- https://search.r-project.org/R/refmans/utils/html/tail.html
ベクトルのインデックスベクトルを安全に返す。
seq_along(LETTERS) #-> 1:26 seq_along(NULL) #-> integer(0)
for
でインデックスを使いたい場合に便利です。NULLの場合はinteger(0)
が返されます。
文字列ベクトルを変形する
purrr::map_chr(LETTERS[1:3], function(s) stringr::str_c(s, "X")) #-> "AX" "BX" "CX"
パッケージの関数名一覧を返す。
#baseパッケージ as.character(lsf.str("package:base"))
#utilパッケージ as.character(lsf.str("package:utils"))
lsf.str
関数の戻り値はls_str
S3クラスなのでprint.ls_str
などが特殊化されています。表示を簡単にするにはas.character
で文字列ベクトルに変換します。
Rのベースパッケージを検索する
summary(lm(...))
の係数情報をtibble
へ変換する。
as_tibble
だけだと行名が消えますが、rownames
引数で係数名の列を作成すれば保持できます。
library(tidyverse) x <- summary(lm(Sepal.Length~Sepal.Width, data=iris)) as_tibble(x$coefficients, rownames="Coef.") ## A tibble: 2 × 5 # Coef. Estimate `Std. Error` `t value` `Pr(>|t|)` # <chr> <dbl> <dbl> <dbl> <dbl> #1 (Intercept) 6.53 0.479 13.6 6.47e-28 #2 Sepal.Width -0.223 0.155 -1.44 1.52e- 1
列指定時も同様です。
library(tidyverse) x <- summary(lm(Sepal.Length~Sepal.Width, data=iris)) as_tibble(x$coefficients[,c("Estimate","Pr(>|t|)")], rownames="Coef.") ## A tibble: 2 × 3 # Coef. Estimate `Pr(>|t|)` # <chr> <dbl> <dbl> #1 (Intercept) 6.53 6.47e-28 #2 Sepal.Width -0.223 1.52e- 1
summary(lm(...))
からF-statisticのP値を取得する。
summary(lm(...))
の結果(summary.lm
S3クラス)からF-statisticのP値を取得するにはlower.tail=FALSE
としてpf
関数を呼び出します。p_value
S3関数などを用意すると便利かもしれません。
p_value <- function(...) UseMethod("p_value") p_value.summary.lm <- function(x) { f <- x$fstatistic unname(pf(f[1], f[2], f[3], lower.tail=FALSE)) } p_value(summary(lm(Sepal.Length~Sepal.Width, data=iris))) #[1] 0.1518983
単回帰分析では係数のP値と同じ値になるので使うことはないそうです(参考:【R】lm()のsummary()の意味と導出方法【回帰分析】 | 世のため自分のためのアウトプット)。
参考
文字列ベクトルのmap
結果を名前付きリストにする。
先にset_names
を適用すると名前付きリストになります。
library(purrr) s <- LETTERS[1:3] s %>% set_names() %>% map(~str_c(., "+1")) #$A #[1] "A+1" # #$B #[1] "B+1" # #$C #[1] "C+1"
セッションの基本パッケージの関数リストを作成する。
library(purrr) library(stringr) x <- sessionInfo()$basePkg %>% set_names() %>% map(function(name) as.character(lsf.str(str_c("package:", name))))
関数名のパターンも指定可能です。
library(purrr) library(stringr) x <- sessionInfo()$basePkg %>% set_names() %>% map(function(name) as.character(lsf.str(str_c("package:", name), pattern="formula")))
enframe
とunnest_longer
でパッケージ名と関数名のtibbleも作成できます。
library(tidyverse) #全関数 sessionInfo()$basePkg %>% set_names() %>% map(function(name) as.character(lsf.str(str_c("package:", name)))) %>% enframe() %>% unnest_longer(value) #「*formula*」 sessionInfo()$basePkg %>% set_names() %>% map(function(name) as.character(lsf.str(str_c("package:", name), pattern="formula"))) %>% enframe() %>% unnest_longer(value) ## A tibble: 7 × 2 # name value # <chr> <chr> #1 stats as.formula #2 stats DF2formula #3 stats formula #4 stats reformulate #5 stats terms.formula #6 stats update.formula #7 base all.equal.formula