2016-11-11 63 views
0

我想編寫一個可重用函數,其輸入參數將是數據框以及我想要將其與其子集合的列的名稱。如何使用字符串函數參數來對該函數中的數據框進行子集

的功能定義如下:

funct <- function(df, colnames){ 
    df_subset = df[ , colnames] 
    return(df_subset) } 

flights_subset <- funct(flights, c("MONTH","YEAR")) #1st arg is a df, 2nd arg is a string 

爲了讓更多的清晰,我已經給代碼來創建輸入文件「航班」和返回的文件我從功能「flights_subset」

期待
flights <- structure(list(YEAR = c(2011L, 2011L, 2011L, 2011L, 2011L), MONTH = c(1L, 
                      1L, 1L, 1L, 1L), DAYOFMONTH = 1:5, DAYOFWEEK = c(6L, 7L, 1L, 
                                   2L, 3L), DEPTIME = c(1400L, 1401L, 1352L, 1403L, 1405L)), .Names = c("YEAR", 
                                                    "MONTH", "DAYOFMONTH", "DAYOFWEEK", "DEPTIME"), row.names = 5424:5428, class = "data.frame") 

flights_subset <- structure(list(MONTH = c(1L, 1L, 1L, 1L, 1L), YEAR = c(2011L, 
                    2011L, 2011L, 2011L, 2011L)), .Names = c("MONTH", "YEAR"), class = "data.frame", row.names = 5424:5428) 
+0

你的函數看起來還好。嘗試'funct(mtcars,c('mpg','cyl'))'。 –

+0

謝謝Chirayu。另外,你能告訴我,如果我將字段存儲在字符串中,我可以使用該字符串作爲函數輸入參數。例如:b < - 「c('MONTH','YEAR')」..並使用b作爲函數的第二個參數。 –

+0

你不認爲這是值得一試,反正你創建了一個字符串錯了。你應該像'b < - c('mpg','cyl')'這樣做,因爲你需要一個字符串向量。 –

回答

1

您的版本沒問題,您只需要修復function中的錯字。另外,不需要返回聲明。

funct <- function(df, colnames){ 
    df[ , colnames] 
} 

,或者您可以使用dplyr

library(dplyr) 

funct <- function(df, colnames){ 
df %>% select_(colnames) 
} 


flights_subset <- funct(flights, c("MONTH", "YEAR")) 
相關問題