with関数について

r
with関数を使うと、毎回$を書かずに済むため、コードが簡潔になります。
Author

Maple

Published

2025-07-28

Modified

2025-07-28

基本構文

with(データ, )
  • データ: データフレームやリスト
  • 式: その中の変数を使ったRの式(計算や関数呼び出しなど)

with関数は、データフレームやリストの中の変数を参照するために使用します。 それぞれの例を示します。

データフレームに対して使う

通常は引数にデータフレームの列を $ で直接指定する必要がありますが、withを使うと、データフレーム内の変数を直接参照できます。

df <- data.frame(x = 1:5, y = c(3, 6, 9, 12, 15))

# 普通に書くと
cor(df$x, df$y)
[1] 1
# withを使うと
with(df, cor(x, y))
[1] 1

リストに対しても使う

withはリストに対しても使用できます。 リスト内の変数を参照する際に便利です。

lst <- list(a = 10, b = 5)
with(lst, a + b)
[1] 15

リストの場合は、以下のことに注意してください: - リストの要素は名前付きである必要があります。 - ネストされたリストには非対応です。

within関数との違い

withはデータフレーム内の変数を参照するために使いますが、withinはデータフレームを変更するために使います。 withinは新しい列を追加したり、既存の列を変更したりする際に便利です。

with(df, {
  z <- x + y
  mean(z)
})
[1] 12

withを使うと、データフレーム内の変数を直接参照できますが、データフレーム自体は変更されません。

within(df, {
  z <- x + y
})
  x  y  z
1 1  3  4
2 2  6  8
3 3  9 12
4 4 12 16
5 5 15 20

withinを使うと、データフレームに新しい列zが追加され、これが新しいデータフレームとして返されます。

注意点

  • with内での変数名は、データフレームの列名と重複しないように注意が必要です。
  • attach関数は使用しない方が良いです。attachは環境を変更するため、予期しない副作用を引き起こす可能性があります。withを使うことで、より安全に変数を参照できます。