Re: [問題] 不會傳遞 expression 到sub-function

看板R_Language作者 (~烤焦麵包~)時間11年前 (2013/06/02 10:24), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/8 (看更多)
※ 引述《cog5566 (刃之56)》之銘言: : [問題類型]: : 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) : [軟體熟悉度]: : 入門(寫過其他程式,只是對語法不熟悉) : [問題敘述]: : 以 subsetBy 為例好了 (這是doBy package 的一個function) : 這個 function 可以依照組別來篩選 data frame 的資料。 : 假設我想要寫一個 function 會用到 subsetBy : 這個 function 的功能是依組別去除 2 倍 SD 之外的資料 : 問題如下: : subsetBy 的第二個參數是要輸入一個 expression (應該是吧) subsetBy(formula, subset, data = parent.frame(), select, drop=FALSE, join=TRUE, ... ) 第二個參數是 logical 不是 expression,可以看他的說明 subset logical expression indicating elements or rows to keep: missing values taken as false. 用他的 example 看一下就知道了 sbstBy> data(dietox) sbstBy> subsetBy(~Evit, Weight < mean(Weight), data=dietox) data(dietox) dietox$Weight < mean(dietox$Weight) : 如 : subsetBy(~Evit, Weight < mean(Weight), data=dietox) : 這個 expression 是篩選資料的算式,其中的變數會對應到 data frame : 的 column name : 而我想要寫一個 function 是 : sdSubsetFun = function(group, dVar, data) : data 是我要操作的 data frame : dVar 是要去掉的 2SD 的目標 column name : group 是分組的依據 (class 是 formula) : 但是我沒辦法將 dVar 傳進去裏面的 subsetBy 的第二個參數 : 程式碼如下 : ###################################################################### : library('doBy') : sdSubsetFun = function(group, dVar, data) { : - sdVar = substitute(dVar) : # 2SD threshold : - subsetThreshold = substitute( (sdVar > (mean(sdVar) - 2*sd(sdVar))) & : - (sdVar < (mean(sdVar) + 2*sd(sdVar))) ) + subsetThreshold = (dVar > (mean(dVar) - 2*sd(dVar))) & + (dVar < (mean(dVar) + 2*sd(dVar))) : dataOut = subsetBy(group, : - subset = eval(subsetThreshold, group, parent.frame()), + subset = subsetThreshold, : data = data) : } - 是刪除,+ 是新增。這樣應該就可以用了 :p : # Create Data : aa = rep(c('a','b','c'), 50) : bb = 1:150 : tData = data.frame(aa,bb) : subData = sdSubsetFun(~aa, bb, tData) : ###################################################################### : 錯誤訊息為: : > subData = sdSubsetFun(~aa, bb, tData) : Error in eval(subsetThreshold, group, parent.frame()) : : object 'subsetThreshold' not found : 也就是說,裏面的 subsetBy 都不會抓我的 subsetThreshold 的值, : 都還是會抓 subsetThreshold 自己本身的 expression。 : 要怎麼做才會讓他抓到 subsetThreshold 的值呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 36.229.4.177 ※ 編輯: Chris7462 來自: 36.229.4.177 (06/02 10:26)
文章代碼(AID): #1HggpNbI (R_Language)
討論串 (同標題文章)
文章代碼(AID): #1HggpNbI (R_Language)