程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何规避 table() 函数抛出的 2^31 错误?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何规避 table() 函数抛出的 2^31 错误??

开发过程中遇到如何规避 table() 函数抛出的 2^31 错误?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何规避 table() 函数抛出的 2^31 错误?的解决方法建议,希望对你解决如何规避 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,请注明来意。