【问题标题】:result_create(conn@ptr, statement) : Result too largeresult_create(conn@ptr, statement) : 结果太大
【发布时间】:2018-12-16 18:38:41
【问题描述】:
t1_DA <- sqldf("select decile, 
               count(decile) as count, avg(pred_spent) as avg_pred_spent,   
               avg(exp(total_spent)) as avg_total_spent,
               avg(log(pred_spent)) as ln_avg_pred_spent,   
               avg(total_spent) as ln_avg_total_spent
               from t1
               group by decile
               order by decile desc")

我正在对文件进行线性回归,当我运行这部分代码时出现以下错误

result_create(conn@ptr, statement) 中的错误:结果太大

有没有办法克服这个错误?

【问题讨论】:

  • t1 有多大?
  • 3500 个观察值和 112 个变量
  • 默认情况下,sqldf 基于 SQLite 的 SQL 方言。检查它是否支持explog等功能。
  • 那肯定不是很大。与@Parfait 的评论一致:stackoverflow.com/a/14552021/3358272explog 均未在 sqlite.org/lang_corefunc.html 上列出。
  • 确实它不适用于 sqldf,当我在没有 exp 和 log 的情况下运行它时,代码可以正常工作。我会用它来代替。谢谢你们的帮助。@r2evans @Parfait

标签: r linear-regression sqldf


【解决方案1】:

如前所述,默认情况下sqldf 使用 SQLite 方言,该方言不支持广泛的数学和统计函数,如 explog。诚然,一个更好的消息可以帮助用户调试,而不是结果太大(可能是作者@ggrothendieck 的git issue?)。

但是,为了将这些输出集成到您的聚合查询中,请考虑在 sqldf 中运行之前创建这些列。使用transformwithin 轻松分配新列,而无需使用$ 分配方法不断引用数据框。

t1 <- transform(t1, exp_total_spent = exp(total_spent),
                    log_pred_spent = log10(log_pred_spent)
                )
# ALTERNATIVE
t1 <- within(t1, {exp_total_spent <- exp(total_spent)
                  log_pred_spent <- log10(log_pred_spent)
             })

t1_DA <- sqldf("select decile, 
                       count(decile) as count, 
                       avg(pred_spent) as avg_pred_spent,   
                       avg(exp_total_spent) as avg_total_spent,
                       avg(log_pred_spent) as ln_avg_pred_spent,   
                       avg(total_spent) as ln_avg_total_spent
                from t1
                group by decile
                order by decile desc")

【讨论】:

  • 我会试试这个。非常感谢。非常感谢! @Parfait
猜你喜欢
  • 2019-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-01
  • 1970-01-01
  • 2014-02-24
  • 2013-12-10
相关资源
最近更新 更多