以下を必要とする関数を作成しようとしています。
- 列名を変数として扱う
- 列の長さを取得する (または最後の行にアクセスする)
- 列内の行のサブセットを合計する
でステップ 1 を実行できますsapply
が、ステップ 2 で行き詰まっています。ベクトルの長さを取得するにはどうすればよいですか? 以下はデータセットの例です。
my.data <- read.table(text = '
y1970 y1980 y1990
5 7 9
50 70 90
500 700 900
5000 7000 9000
', header = TRUE, na.string='NA', stringsAsFactors=FALSE)
ステップ 2 の望ましい結果は次のとおりです。
5000 7000 9000
ステップ 3 の結果は次のとおりです。
4445 6223 8001
ステップ 2 の関数は次のとおりです。
my.function <- function(x) {
names.x <- as.character(colnames(my.data)[x])
x2 <- my.data[[x]][length(x)] # returns first row of my.data
return(x2=x2)
}
sapply(1:ncol(my.data), function(x) {my.function(x)})
# possible code for Step 3 if I get Step 2 to work:
(x2 - sum(my.data[[x]][1:(length(my.data[[x]])-1)], na.rm=TRUE)
これx
はlength == 1
、上記のコードが の最初の行のみを返す理由を説明するものでありx2
、最後の行だけではなく、私が返したい行です。
これらの操作は関数の外で簡単に実行できますが、列名を変数として使用できる関数内でこれらの操作を実行するにはどうすればよいでしょうか? アドバイスありがとうございます。