2017-04-03 51 views
-1

我想創建一個函數,使用來自其他數據框的一些變量創建新的數據框。爲此,我需要以某種方式在我自己的函數中打印變量名稱。在我自己的函數中打印變量名稱

變量來自兩個數據幀(asd和tetracam),它們有六個共同的變量,頻段「w530」,「w550」,「w570」,「670」,「w700」和「w800」。所以,我想創建六個數據幀,每個頻段一個。一個接一個我可以這樣寫:

# 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") 

然後,我試了幾種方法,例如,使用catsprintf,將使用從字符串列表,以填補我的功能。但它沒有奏效。其實,我不確定我會用哪個家庭功能。如果有可能在這種情況下使用任何:

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

您沒有將這兩個數據幀(即asd和tetracam)傳遞到函數中。嘗試再添加兩個參數兩個函數,並將這兩個參數用作輸入。否則,默認情況下,函數無法訪問環境變量。 – 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