2017-04-03 8 views
-1

他のデータフレームの変数を使って新しいデータフレームを作成する機能を作成したいと思います。そのためには、私自身の関数で変数名を何とか出力する必要があります。自分自身の関数で変数名を表示するr

変数は、6つの変数、バンド「w530」、「w550」、「w570」、「670」、「w700」および「w800」を有する2つのデータフレーム(asdおよびtetracam)から来る。したがって、各バンドに1つずつ、6つのデータフレームを作成したいと考えています。

# Band w530 
w530<-data.frame(tetracam$filename,tetracam$time,tetracam$type,tetracam$w530,asd$w530) 
names(w530)<-c("filename","time","type","tetracam","asd") 
w530<-w530[order(w530$time),] 

それが正常に動作しますが、私はすべてのバンドのために実行するために機能としてそれをやってみたい:私はこのように書くことができる一つずつ。上のコードでw530をすべて置き換える必要があると思いました。適用する家族のいくつかを使用することを考えたので。私が最初に私の共通の変数の名前でリストを作成しましたので、:そして、

bands<-c("w530","w550","w570","670","w700","w800") 

、私は私の機能を埋めるために、リストから文字列を使用しcatまたはsprintfを使用して、例えば、いくつかの方法を試してみました。しかし、それは動作しませんでした。実際には、applyファミリー機能を使用するかどうかはわかりません。この場合、いずれかを使用することができます:

my.fun<- function(band){ 
    sprintf("%s<-data.frame(tetracam$filename,tetracam$time,tetracam$type,asd$%s,tetracam$%s)",band,band,band) 
    sprintf("names(%s)<-c('filename','time','type','asd','tetracam')",band) 
    sprintf("%s[order(%s$time),]",band,band) 
} 

何か助けていただければ幸いです。

+0

これらの2つのデータフレーム、つまりasdとtetracamを関数に渡すことはありません。 2つ以上の引数を2つ追加し、これらの2つを入力として使用してください。それ以外の場合、関数はデフォルトで環境変数にアクセスできません。 – Masoud

+0

'dput'を使ってデータセットの再現可能な例を提供してください。 – Masoud

+0

[なぜ答えを受け入れるのですか?](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)回答を受け入れることで、同じ質問をした他の人に役立ちます。 – Masoud

答えて

0

これはあなたの機能を変更する際に行う必要があります。これをテストするための再現可能な例はありませんでしたが、うまくいくはずです。

my.fun<- function(band, tetracam,asd){ 
    sprintf("%s<-  data.frame(tetracam$filename,tetracam$time,tetracam$type,asd$%s, 
    tetracam$%s)",band,band,band) 
    sprintf("names(%s)<-c('filename','time','type','asd','tetracam')",band) 
    sprintf("%s[order(%s$time),]",band,band) 
} 
0

トリックdf[varName]イディオムを使用してdata.frame列にアクセスすることです。

fun1 <- function(band, tetracam, asd){ 

    df<-data.frame(tetracam$filename,tetracam$time,tetracam$type,tetracam[band],asd[band]) 
    names(df)<-c("filename","time","type","tetracam","asd") 
    df<-df[order(df$time),] 
    return(df) 
} 

for (band in bands){ 
    single_band_df <- fun1(band, tetracam, asd) 
} 
+0

@ Vinceありがとうございました。そのようなシンプルで、私が必要としていたことを正確にしまし – rafaexx

関連する問題