まず、私は現在 R プログラミング コースを受講している R 初心者です。R の基礎を教えることは非常に不足しているので、スタック オーバーフローのすばらしい貢献者を通じて自分自身を学ぼうとしています。ネストされた関数がどのように機能するかを理解しようとしています。つまり、レキシカル スコープがどのように機能するかについても学ぶ必要があります。複数の CSV ファイルで完全なケースを計算し、今すぐ素敵なテーブルを吐き出す関数があります。
- CSV ファイルは次のとおりです: https://d396qusza40orc.cloudfront.net/rprog%2Fdata%2Fspecdata.zip
そして、ここに私のコード
apply
があります.complete<- function(directory, id = 1:332){ data <- NULL for (i in 1:length(id)) { data[[i]]<- c(paste(directory, "/", formatC(id[i], width=3, flag=0), ".csv", sep="")) } cases <- NULL for (d in 1:length(data)) { cases[[d]]<-c(read.csv(data[d])) } df <- NULL for (c in 1:length(cases)){ df[[c]] <- (data.frame(cases[c])) } dt <- do.call(rbind, df) ok <- (complete.cases(dt)) finally <- as.data.frame(table(dt[ok, "ID"]), colnames=c("id", "nobs")) colnames(finally) <- c('id', 'nobs') return(finally) }
finally
私は今、この新しい関数内で上記の関数の出力であるデータフレーム内のさまざまな変数を呼び出そうとしています:
corr<-function(directory, threshold = 0){
complete(directory, id = 1:332)
finally$nobs
}
corr('specdata')
この関数がないと、データフレームが吐き出されますが、 objectでfinally$nobs
変数を呼び出そうとすると、オブジェクトが見つからないと表示されます。この問題は、レキシカル スコープに関する私の理解不足によるものだと認識しています。教授はレキシカル スコープをあまり明確にしていないため、ネストされた関数環境内でオブジェクトを見つける方法が完全にはわかりません...助けは素晴らしいでしょう。nobs
finally
finally