在R中,从多个对象创建摘要数据框

时间:2015-12-19 13:28:53

标签: r dataframe apply

我正在尝试创建一个“摘要”数据框,其中包含一些关于R项目中几个对象的高级统计信息。我甚至无法完成这个简单的任务,我尝试使用For循环和Apply函数,但没有运气。

在搜索(很多)SO之后我发现For循环可能不是最佳性能选项,所以我对任何完成工作的解决方案持开放态度。

我有三个对象:“大字符(向量)”类的text1 text2text3(想象一下,我可能正在探索这些对象并将从它们创建一个NLP预测模型)。每个都是>一旦加载到R中,大小为250 MB(每行超过100万“行”)

我的目标:将object.size() length()max(nchar())的结果存储在我的3个对象的表格中。

方法1:使用Apply()函数

问题:我没有成功将多个函数应用于单个对象。我理解如何做简单的应用,如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行),但我看到过其他问题的反馈,建议不要这样做。< / p>

感谢您帮助我了解实现此目标的正确方法。我知道如果我甚至无法弄清楚这个简单的问题,我将无法做NLP,但R是我第一次尝试编程。喝!

1 个答案:

答案 0 :(得分: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