4

2つの引数を取る関数を作成しようとしています。1つの引数はデータフレームの名前であり、2番目の引数はそのデータフレームの列の名前です。目的は、指定された列に含まれる情報に基づいて、フレーム全体のデータを操作する関数です。

私の問題は、2番目の引数に入力された文字式を使用して、関数内のデータフレーム内の特定の列にアクセスする方法がわからないことです。これが非常に簡単な例です。

datFunc <- function(dataFrame = NULL, charExpres = NULL) {

return(dataFrame$charExpress)

}

たとえば、次のように入力した場合

datFunc(myData, "variable1")

これはmyData$variable1を返しません。これを行う簡単な方法が必要です。質問がばかげている場合は申し訳ありませんが、ここで少し助けていただければ幸いです。

関連する質問は、文字列「myData $ variable1」を使用して、myDataから実際にvariable1を返すにはどうすればよいですか?

4

3 に答える 3

3

OPはデータフレームの名前も文字列として渡したいと思います。その場合、関数は次のようになります。(他の回答から借りたサンプル)

fooFunc <- function( dfNameStr, colNamestr, drop=TRUE) {
  df <- get(dfNameStr)
  return(df[,colNamestr, drop=drop])
}


> myData <- data.frame(ID=1:10, variable1=rnorm(10, 10, 1))
> myData
   ID variable1
1   1 10.838590
2   2  9.596791
3   3 10.158037
4   4  9.816136
5   5 10.388900
6   6 10.873294
7   7  9.178112
8   8 10.828505
9   9  9.113271
10 10 10.345151


> fooFunc('myData', 'ID', drop=F)
   ID
1   1
2   2
3   3
4   4
5   5
6   6
7   7
8   8
9   9
10 10
> fooFunc('myData', 'ID', drop=T)
 [1]  1  2  3  4  5  6  7  8  9 10
于 2013-02-08T15:43:15.630 に答える
2

もうすぐです。この種のインデックス作成の[代わりに使用してみてください$

  datFunc <- function(dataFrame = NULL, charExpres = NULL, drop=TRUE) {
  return(dataFrame[, charExpres, drop=drop])
  }


# An example
set.seed(1)
myData <- data.frame(ID=1:10, variable1=rnorm(10, 10, 1))  # DataFrame

datFunc(myData, "variable1") # dropping dimensions
[1]  9.373546 10.183643  9.164371 11.595281 10.329508  9.179532 10.487429 10.738325 10.575781  9.694612

datFunc(myData, "variable1", drop=FALSE) # keeping dimensions
   variable1
1   9.373546
2  10.183643
3   9.164371
4  11.595281
5  10.329508
6   9.179532
7  10.487429
8  10.738325
9  10.575781
10  9.694612
于 2013-02-08T15:39:00.070 に答える
0

または、データフレームの列インデックスを見つけることもできます。

df <- as.data.frame(matrix(rnorm(100), ncol = 10))
colnames(df) <- sample(LETTERS, 10)

column.index.of.A <- grep("^A$", colnames(df))
df[, column.index.of.A]
于 2013-02-08T15:41:38.563 に答える