2011-07-05 58 views
2

我在R中定義函數時遇到了問題。我試圖將for循環的內容轉換爲函數,以便我可以將lapply函數的列表,(以及在使用所述包multicoremclapplyR:在用戶定義的函數中構建數據框

我需要通過行建立一個數據幀的行,同時一個文本和一個數值在從函數的時間。我從以前的帖子瞭解到,我必須以某種方式返回值,因爲R的傳遞和複製而不是傳遞參考方案(請參閱:How to add a column in the data frame within a function

下面是我正在做的簡化版本:

letters <- c('aa', 'bb', 'cc', 'aa', 'bb', 'dd', 'cc', 'dd', 'ee', 'ee') 
numbers <- 1:10 
madeup <- data.frame(letters, numbers) 
output <- data.frame() 

functest <- function(x) { 
    subtest <- subset(madeup, letters==x) 
    if (nrow(subtest==2)){ 
     calc <- subtest$numbers[2] - subtest$numbers[1] 
     ...WHAT GOES HERE?... 
    } 
} 

任何人都知道我應該做些什麼來回報xcalc讓我可以再rbind這兩個各值代入output數據幀的新行?

如果我可以複製在這兩個值函數,我在想象執行命令會看起來像---

output <- rbind(output, [mc]lapply(letters, functest)) 

---但很高興能糾正這個!

+0

如果(nrow(分測驗== 2))可能不是你的意思,但它不是真的無論如何,清除你的問題,以便清楚你想要的功能是什麼,看起來你想通過傳入x來發生某些事情,「subtest」是來自「madeup」的兩行,但是。 。 。如何發佈你想要轉換的for循環,所以我們至少有這樣的? – mdsumner

+0

@mdsumner嗨 - 'if(nrow(subtest == 2))'就是我的意思 – cainesap

+0

@mdsumner(oops,沒有意識到返回添加評論;道歉..新手..)所以,是的,如果聲明就是我的意思,我決定展示for循環的類比,因爲我正在使用的是不容易重現的。我需要的是x值有2行,並顯示減法計算的結果..這樣我就可以把它們放在一個數據框中 – cainesap

回答

2

rbind ing data.frames我的經驗很慢,但無論如何:用return(data.frame(x,calc))替換佔位符。

改變功能,可能讓他們都到一個data.fame最簡單的方法之後是通過:

output<-do.call(rbind, lapply(letters, functest)) 
+0

+1但是,你可能想要使用獨特的(字母)' – James

+0

輝煌!非常感謝尼克:-) – cainesap

+0

@詹姆斯 - 是的,你是對的,我在我的原始代碼中這樣做,但忘記了這一步:我應該添加uniqletters < - 獨特(字母),然後它會輸出< -do.call(rbind,lapply(uniqletters,functest)) – cainesap

相關問題