错误:执行rlm时变量的类型(列表)无效

时间:2015-01-20 18:56:58

标签: r plyr

我正在尝试将模型拟合到我的数据集中的每个位置。我运行以下代码(重新创建一个示例来镜像我正在使用的数据):

library(plyr)
library(MASS)

month.abbr <- c("Jan", "Feb", "Mar", "Apr", "May",
     "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec")
month <- factor(rep(month.abbr, length = 1200), levels = month.abbr)
county_code <- sample(1:100, 1200, replace = T)
store_rev <- sample(2000:85000, 1200, replace = T)
color_levels <-c('blue', 'red', 'green')
colors <- factor(rep(color_levels, length = 1200), levels = color_levels)
data <- data.frame(month, county_code, store_rev, colors)

product_aggregate_values <-ddply(data, ~month+county_code+colors, summarise, total_rev = sum(store_rev))
deseasf <- function(total_rev) rlm(total_rev~month-1, maxit = 50)
models <- ddply(product_aggregate_values, ~county_code + colors, deseasf)
failed <- ddply(models, function(x) !x$converged) 

我收到以下错误:

Error: invalid type (list) for variable 'total_rev'

我认为这可能是因为我使用product_aggregate_values作为data.frame,但是当我尝试使用daply创建它并相应地调整代码时,我收到以下错误:

Error in splitter_a(.data, .margins, .expand) : 
'pairlist' object cannot be coerced to type 'integer'
Error in inherits(.data, "split") : object 'models' not found

1 个答案:

答案 0 :(得分:0)

问题出在您的deseasf功能中。传入的是子集化的data.frame,而不仅仅是total_rev向量。您应该将其用作data=的{​​{1}}参数。那个功能应该是

rlm

这实际上仍然会对您的测试数据产生错误,因为您正在尝试估算每个月的系数,而您每月只有一个值,因此您会得到deseasf <- function(x) rlm(total_rev~month-1, data=x, maxit = 50) 实际抱怨的“完美”。希望它可以处理您的真实数据。