2015-12-19 81 views
1

我試圖創建一個「彙總」數據框,其中包含一些關於我的R項目中的幾個對象的高級統計信息。即使完成這個簡單的任務,我也遇到了麻煩,我嘗試過使用For循環和Apply函數,但沒有運氣。因此,我發現For循環可能並不是最好的選擇,所以我願意接受任何可以完成工作的解決方案。我有三個對象:text1text2text3「大字符(矢量)」類(想象我可能會探索這些對象,並將從它們創建一個NLP預測模型)。每個面積> 250 MB(向上1萬元的「行」,每個)一次裝入R.在R中,從多個對象創建彙總數據框

我的目標:存儲在表中object.size()length()max(nchar())結果我的3個對象。

方法1:使用的應用()函數

問題:我還沒有成功地應用於多種功能的單個對象。我明白如何做到簡單適用,如lapply(x, mean)但我在這裏不足。

方法2:綁定行使用For循環

我喜歡這個解決辦法,因爲我幾乎知道如何實現它。許多SO用戶表示這是一種糟糕的做法,但我缺乏其他想法。

sources <- c("text1", "text2", "text3") 
text.summary <- data.frame() 

for (i in sources){ 
    text.summary[i ,] <- rbind(i, object.size(get(i)), length(get(i)), 
    max(nchar(get(i)))) 
} 

問題:這將返回錯誤data length exceeds size of matrix - 我知道我可以定義我的數據幀(第2行)的結構,但我已經看到這方面的建議反對這樣做,其他的問題太多了反饋。

感謝您幫助我理解完成此操作的正確方法。我知道如果我甚至不知道這個簡單問題,我會在做NLP時遇到麻煩,但是R是我第一次進入編程領域。錢幣!

回答

0

剛剛嘗試,例如:

do.call(rbind, lapply(list(text1,text2,text3), 
     function(x) c(objectSize=c(object.size(x)),length=length(x),max=max(nchar(x))))) 

你會得到一個matrix。如果需要,您可以稍後強制爲data.frame

+0

這工作非常好,謝謝。我將更多地瞭解'do.call()'! –