-2

以前の投稿の解決策を実装しようとしましたが、関数を使用して理解できない動作に遭遇しました。

次の形式のデータセットがあります。

tC <- textConnection("Col1  Col2    Col3
yes no  no
yes no  yes
yes yes yes");
data1 <- read.table(header=TRUE, tC);
close.connection(tC);
rm(tC);
data1["Col4"] <- NA;

ここで、関数を使用して (今のところ) 列 4 のエントリを任意に置き換えたいと思います。

updateRow <- function(rIndex) {  
    data1[rIndex, 4] <- 1
data1 <- return(data1)
}

ただし、関数を適用すると、期待どおりに更新されるように見えますが (行 1 col4 のエントリは「1」になります)、呼び出すとデータフレームは元の内容に戻ります。

updateRow(4)
data1

誰かがこれがなぜなのか、私が間違っていることを説明できますか?

4

4 に答える 4

1

目的が data1 を更新することである場合、構文が間違っています。使用する必要があります

updateRow <- function(rIndex) {  
    data1[rIndex, 4] <- 1
    return(data1)
}
data1<-updateRow(4)

これでうまくいくはずです。行 4 と列 4 を更新し、値を 1 に設定します。

最後の割り当てをスキップしたい場合は、関数を次のように定義できます

updateRow <- function(rIndex) {  
    data1[rIndex, 4] <<- 1
}
updateRow(4)

これにより、行 4 と列 4 も値 1 に更新されます。これは、dayne の回答と同じ解決策です。

于 2013-09-10T14:35:22.450 に答える