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を参照し、vignette('nse')Rに見てください。

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 
関連する問題