2015-12-19 52 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()'! –