よろしくお願いします。

Rで
画像の説明をここに入力

のようなデータフレームの「あり」、「なし」を1, 0 に変更しようと思って以下のような自作の関数を書きましたが、もとのデータフレームに変更が反映されておらず、要素は「あり」、「なし」のままでした。

nihongosayonara <- function(df) {
  for(i in 1:length(names(df))){
    df[i][df[i] == "あり"] <- 1
    df[i][df[i] == "なし"] <- 0}}

この際特にエラーやWarningは出ませんでした。
関数内部の終わりにprint()で列を見てみると変更されているようです。

手作業で

df[1][df[1] == "あり"] <- 1
df[1][df[1] == "なし"] <- 0

のようにするときちんと変更されているのですが、この振る舞いの違いは何なのでしょうか。