大佬教程收集整理的这篇文章主要介绍了如何规避 table() 函数抛出的 2^31 错误?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我真的尽我最大的努力通过 stackoverflow 搜索解决方案,但不幸的是我找不到合适的问题。因此,我必须自己提出一个问题。
我正在处理一个包含 sessionID 和主题的数据集。我想知道,有多少特定主题的物品被一起购买。值得庆幸的是,堆栈溢出成员有一个好主意,它使用了 table() 函数和 crossprod() 函数的组合。
topicPairs <- crossprod(table(as.data.frame(transactions)))
您可以在这里查看:How can I count,how many Items have been in one session together?
对于主题(或流派),这种方法非常有效,最终矩阵在存储使用方面非常小。
但是,现在我想知道,在不同的会话中总共购买了多少艺术家。因此,我只是用艺术家(这里,我有 35727 个)替换流派(我有 360 个)并应用这种“表格交叉组合”。不幸的是,R 抛出以下错误消息:
attempt to make a table with >= 2^31 elements
我也明白发生了什么:表格函数为每个会话和类型生成一个条目。由于我只有 360 种不同的流派,所以这没有问题,因为会话数乘以 gernes 数小于 2^31。另一方面,我有 35727 位不同的艺术家。如果我将此数字乘以会话数,我将超过 2^31 个元素的数量。
这真的很可悲,因为这个解决方案非常聪明和简单,而且效果很好。所以,我想问你,是否有办法绕过这个问题。当然,我的数据集相当大……但有人使用更大的数据集。
Perheps,我必须将设置的数据拆分为较小的子集,并在最后一步将它们合并在一起。但这并不容易,因为有一些艺术家出现,例如在子集 1 中但不在子集 2 中。因此,我不能简单地按元素添加矩阵。
如果你能为这个问题提供一个解决方案,那就太棒了,因为它让我发疯,离完美的解决方案很近。
在此先非常感谢您!
当您的结果矩阵很可能是稀疏的,因为零的百分比很高,如果可能,使用稀疏矩阵来节省空间是值得的。
对于您的data:
sessionID <- c(1,2,3,4,5,6,6)
topic <- c("rock","house","country","rock","r'n'b","pop","classic","country")
transactions <- cbind(sessionID,topiC)
您可以使用 xtabs
返回一个稀疏矩阵(而不是由 table
返回的密集矩阵),并使用 @H_100_7@matrix 包找到这个的叉积,哪个将保留稀疏性。
tab <- xtabs(~ sessionID + topic,data=transactions,sparse=TRUE)
Matrix::crossprod(tab)
以上是大佬教程为你收集整理的如何规避 table() 函数抛出的 2^31 错误?全部内容,希望文章能够帮你解决如何规避 table() 函数抛出的 2^31 错误?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。