我正在學習如何編寫使用常見軟件包(如data.table和dplyr)的R函數。R:在用戶定義函數中使用get和data.table
這個功能我寫的計算觀察的特定類別的百分比內的一些其他組(例如:與10-20mpg汽車的份額,被釋放在2015年那個),併產生一個表。這裏沒有它的功能:
library(data.table)
library(scales)
#Create test dataframe and cut off points
test<-data.frame(x=c(0:10), y=c(rep(1,5),rep(2,6)), z=c("A","A","A","B","B","B","C","C","C","C","C"))
test <- data.table(test)
#trial non function version (calculating share of row by category z): works
tmp<-test[,.(N=.N), keyby=.(y,z)]
tmp[,total:=sum(N), by=y]
tmp[,percent:=percent(N/total)]
dcast(tmp,y ~ z, value.var="percent")
但爲了使它在一個函數內工作,我必須使用get。一旦得到評估,兩個分類變量必須被稱爲「get」和「get.1」的其餘代碼(見下文)。有沒有辦法避免這種情況?
#Two way table function: data.table
tw_tab<-function(dt,v1,v2){
#set up variables as charaters
v1<-as.character(substitute(v1))
v2<-as.character(substitute(v2))
dt<-as.character(substitute(dt))
#function
tmp<-get(dt)[,.(N=.N), keyby=.(get(v1),get(v2))]
tmp[,total:=sum(N), by=get]
tmp[,percent:=percent(N/total)]
dcast(tmp,get ~ get.1, value.var="percent")
}
#test function
tw_tab(test, y, z)
我嘗試了用「得到(V1)」和「得到(V2)」整個代碼,但這不起作用
我看了其他職位上的用戶與數據功能.table(例如,Get a user-defined function work in data.table)但是他們似乎沒有涉及這個問題/遇到它。
我是新來的這一點,所以希望得到更好的方式來做到這一點的人有任何其他反饋/意見。
據透露,'(N = .N)'和'.N'。將做同樣的事情,因爲這是默認名稱。此外,在這個函數中,我猜沒有什麼是由keyby和by獲得的。 – Frank