2016-11-11 72 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")) 
相关问题