我正在尝试创建一个“摘要”数据框,其中包含一些关于R项目中几个对象的高级统计信息。我甚至无法完成这个简单的任务,我尝试使用For循环和Apply函数,但没有运气。
在搜索(很多)SO之后我发现For循环可能不是最佳性能选项,所以我对任何完成工作的解决方案持开放态度。
我有三个对象:“大字符(向量)”类的text1
text2
和text3
(想象一下,我可能正在探索这些对象并将从它们创建一个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是我第一次尝试编程。喝!
答案 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
。