library(tidyverse)
dat <- tibble(
num = 1:10,
fac2 = rep(c("a","b"), 5),
fac3 = rep(c("A","B","C"), 4)[1:10]
)前の動画では、基本である、個数、和、平均の関数について説明しました。
ただ、一般的にtibbleなどからベクトルを取り出す$記号を利用したスクリプトは、
- 書くのにタイプ量が増える、
- tibbleの名前が長いと可読性が落ちる
というところで、個人的にはお勧めできません。
ですので、この動画では$サインをなるべく使わずに書く方法についてご説明いたします。
方法1:attachを利用する方法
一つ前の動画では、平均を求めるのに、
sum(dat$num)/length(dat$num)[1] 5.5
と記載していました。
ただ、dat$と何回も打つのは面倒なので、できれば、次のようにnumとだけ打つことでベクトルを呼び出せると便利です。
sum(num)/length(num) #エラーですねError in sum(num): invalid 'type' (closure) of argument
Environmentペーンの内容を少し覚えておいてください。
attach(dat) #とすると、ここ以降、dat$とかかなくてもOK
sum(num)/length(num)[1] 5.5
num [1] 1 2 3 4 5 6 7 8 9 10
fac2 [1] "a" "b" "a" "b" "a" "b" "a" "b" "a" "b"
fac3 [1] "A" "B" "C" "A" "B" "C" "A" "B" "C" "A"
detach(dat) #これでattach効果が消える
sum(dat$num)/length(dat$num)[1] 5.5
sum(num)/length(num) #エラー!Error in sum(num): invalid 'type' (closure) of argument
簡単ですね?
ただ、detachを忘れたりするとエラーの原因になったり思わぬ動作を引き起こすケースがあります。具体的には。。
num <- 1000 #numという変数を使いたいので作成100行くらいのスクリプト
attach(dat) #fac2を利用したいThe following object is masked _by_ .GlobalEnv:
num
mean(num) #dat$numの平均を求めたつもり[1] 1000
本当に求めたかったのは
mean(dat$num)[1] 5.5
detach(dat)いかがでしょうか?
このようなエラーが生じる可能性があるため、できればattach、detachは使わないようにしています
ただし、ネットで検索した場合によく使われる関数でもあるのでここで紹介しました。
次の動画では、attach, detachを使わないで計算する方法を解説いたします。