2

関数内で作成された固定変数といくつかの変数の混合物を使用して、関数内のデータフレームをサブセット化しようとしています (変数名しか知りませんが、事前にベクトル化することはできません)。簡単な例を次に示します。

a<-c(1,2,3,4)
b<-c(2,2,3,5)
c<-c(1,1,2,2)
D<-data.frame(a,b,c)

subbing<-function(Data,GroupVar,condition){
  g=Data$c+3
  h=Data$c+1
  NewD<-data.frame(a,b,g,h)
  subset(NewD,select=c(a,b,GroupVar),GroupVar%in%condition)
}

私のアプリケーションでは、関数の外で g と h を計算できないことに注意してください。h の値 (上記のように) に従って選択したい場合もあれば、g を使用したい場合もあります。両方を使用する可能性もありますが、1 を使用してサブセット化できるだけでも素晴らしいでしょう。

subbing(D,GroupVar=h,condition=5)

これは、オブジェクト h が見つからないというエラーを返します。as.formula やあらゆる種類のものを使用してサブセットを修正しようとしましたが、毎回失敗しました。

関数の使いやすさに加えて、サブセットを使用したい理由がもう 1 つあります。

私が実際に取り組んでいる関数では、サブセットを2回使用しています。最初は単純なサブセット関数です。古き良きデータ [colnames()=="g",] を使用するのがおそらく最善であると別のブログが調査したことを以下に指摘しました。提案をありがとう、私は試してみます。

ただし、別の問題があります。いくつかの複雑な設計調査 (パッケージ調査を参照) を扱っているため、関数でサブセット (またはバリエーション) も使用します。[] を使用してグループを選択すると、パラメーターに対して間違った se が取得されるため、これは非常に重要な問題だと思います。

ありがとうございました

4

1 に答える 1

4

関数が最初に定義しようとしているときに、それが起こっていますGroupVarhR は(データフレーム内ではなく) 単独でオブジェクトを探しています。

最善の方法は、関数内で列名を引用符で囲んで参照することsubsetです。ただし、もちろん、条件部分を回避する必要があります。

subbing <- function(Data, GroupVar, condition) {
   ....
   DF <- subset(Data, select=c("a","b", GroupVar))
   DF <- DF[DF[,3] %in% condition,]
}

これで問題は解決しますが、あるデータ フレームのインデックスを別のデータ フレーム内に配置するのは煩わしい場合があります。

于 2012-10-30T19:01:22.637 に答える