2016-07-26 14 views
0

這裏是一個相當新的R用戶,剛剛進入更高級的材質。我正在編寫一個簡單的函數,它使用dplyr包中的排列函數。該函數打算使用部分字符串匹配來過濾數據幀,然後將結果排序到函數中'sortby'參數指定的列上。這是我到目前爲止:在自定義函數中使用dplyr arrange()函數對修改後的數據幀進行排序

calcs <- function(data, type, sortby) { 
filt <- data[grep(type, data$name), ] 
ord <- dplyr::arrange(filt, desc(sortby)) 
return(ord) 
} 

評估時未找到sortby變量。我猜測它與標準和非標準評估有關,但這有點超出我的編程能力範圍。

這裏是一個重複的例子:

mydata <- data.frame(name=c("GI Joe", "GI Joe", "Batman", "Xbox"), 
        rating=c(8,12,8,1)) 

calcs(data=mydata, type="GI", sortby=rating) 

Error in desc(sortby) : object 'rating' not found 

需要明確的是,我有此功能的目標是使用部分字符串匹配過濾的數據集,並就感興趣的列排序結果。

回答

0

你應該重寫你的函數來使用NSE。關於NSE的使用,請參見this post,並在R中查看vignette('nse')

calcs <- function(data, type, sortby) { 
    sorting <- paste0('desc(', sortby, ')') #nse 
    filt <- data[grep(type, data$name),] 
    ord <- dplyr::arrange_(filt, .dots = sorting) #use arrange_ 
    return(ord) 
} 

mydata <- data.frame(name = c("GI Joe", "GI Joe", "Batman", "Xbox"), 
        rating = c(8,12,8,1)) 

calcs(data = mydata, type = "GI", sortby = 'rating') 

    name rating 
1 GI Joe  12 
2 GI Joe  8 
相關問題