我試圖使用一個自定義函數,它從一個data.frame(raw_DF)獲取一行數據,並使用來自單獨data.frame(calibrant_DF)的校準數據,然後計算Raw12的校準值。我收到此錯誤:如何將多個data.frames作爲R中的輸入應用自定義函數?
Error in cal_DF$Cal_set : $ operator is invalid for atomic vectors Called from: top level
看來,應用功能不喜歡有data.frame傳遞給它的這種方式,所以我已經花了幾年時間試圖弄清楚,如果我可以使用一個不同的應用函數(例如mapply,lapply)或plyr函數來完成我想要做的事情,但沒有任何運氣。建議?
示例代碼(真正的功能和DF的更爲複雜):
raw_DF<-data.frame("Cal_set"=c(1,2,1,2),"Raw12"=c(3.3,3.1,5.1,4.2))
calibrant_DF<-data.frame("Cal_set"=c(1,2),"b12"=c(.01,.04),"m12"=c(.95,.99))
apply.cals <- function(raw_row,cal_DF){
current_cals<-cal_DF[which(cal_DF$Cal_set==raw_row$Cal_set),]
raw12<-raw_row$Raw12
cal12<-(raw12-current_cals$b12)/current_cals$m12
outdata<-data.frame(raw12,cal12)
return(outdata)
} # End of apply.cals
calibrated_data<-apply(X=raw_DF,MARGIN=1,FUN=apply.cals,cal_DF="calibrant_DF")
而我所需的輸出是一個data.frame(或東西我可以放到一個data.frame)這樣的結果:
raw12 cal12 3.3 3.463158 3.1 3.090909 5.1 5.357895 4.2 4.20202
感謝您的任何建議!
編輯 - 解決了,但.... 我會對plyr解決方案感興趣,如果其他人有一個想法 - 這是一個函數,我想更好地理解,我的印象是,這可能是一個問題優雅地處理。
你的功能被寫成如果參數'cal_DF'是' data.frame'(大概;可能是一些其他的二維對象),但是你傳遞給calicy_DF「',它是一個原子字符矢量,而不是'data.frame'。如果您嘗試從全局環境傳遞對象'calibrant_DF',請不要引用其名稱。 – nrussell 2014-09-02 20:19:13
編輯代碼以刪除這些引號後,我收到一個不同的但類似的錯誤:'在raw_row $ Cal_set:$運算符中的錯誤對原子向量無效 調用自:'[.data.frame'(cal_DF,which(cal_DF $ Cal_set == raw_row $ Cal_set), )' – DirtStats 2014-09-02 20:30:40
您能否提供您想要的輸出示例 - 我不能肯定地說,但我懷疑'apply'對於您嘗試完成的任何操作都是錯誤的函數。 – nrussell 2014-09-02 20:38:36