2013-12-12 36 views
1

我是一個C語言程序員,他被要求在R中做一些工作。我需要弄清楚如何調用一個函數多次傳入一個數據幀的「塊」。對於前兩列不同的所有行,我需要調用一次函數。將函數應用於數據幀的塊

這裏就是我的意思是:

Stratum<-c("FPN", "FPN", "FPN", "MPN", "MPN", "MPN") 
Cal<-c("ynnn", "ynnn", "yynn", "ynnn", "ynnn", "yynn") 
Band.1<-c(1,2,1,1,2,1) 
Band.2<-c(2,3,2,2,3,2) 
Regroup<-c("No","Yes","No","Yes","No","No") 
decs.data<-data.frame(Stratum,Cal,Band.1,Band.2,Regroup,stringsAsFactors=FALSE) 

Stratum Cal Band.1 Band.2 Regroup 
    FPN ynnn  1  2  No 
    FPN ynnn  2  3  Yes 
    FPN yynn  1  2  No 
    MPN ynnn  1  2  Yes 
    MPN ynnn  2  3  No 
    MPN yynn  1  2  No 

對於上述數據我會調用該函數的四倍 - 一旦傳遞decs.data的所有行,其中階層=「FPN」和加州=「ynnn 「,然後Stratum =」FPN「和Cal =」yynn「等。

該函數不會在這些行上操作,它使用它們來確定從光盤加載哪個數據文件以及如何處理它。

我該如何在R中以這種方式調用函數?我確定'申請'必須參與,但我正在努力弄清楚如何。

更新: 我不需要所有行的data.frame作爲參數傳遞給函數,只是那些匹配(即行1 & 2第一個呼叫,3爲2,4 & 5第五和第六)。

該函數將根據階層&校準列(例如FPN.ynnn.rdata)加載數據文件,然後根據Band.1,Band.2和Regroup列決定如何處理它。

本質上,decs.data不是我想操作的數據,而是一個決定矩陣,它定義了哪些rdata文件需要重新組合。

+0

如果您提供了有關您的功能的更多細節,找到合適的解決方案會更容易。我在下面提到'應該',這應該起作用。但是,如果不需要'data.frame'中的所有行作爲該函數的參數,則可以使用稍微簡單的解決方案。 – nograpes

+0

謝謝,我添加了更多的信息,我希望能更好地解釋一些事情。 – Nelviticus

+0

我認爲我的答案仍然正確,儘管您的更新。 – nograpes

回答

4

您正在尋找by。如果你想在decs.data的子集運行功能,採用StratumCal作爲分割變量,你可以這樣做:

by(decs.data,decs.data[c('Stratum','Cal')],function) 

其中function是你的函數。

+1

應該是(decs.data,decs.data [c('Stratum','Cal')],函數) – rfoley

相關問題