biglm - Error: $ operator is invalid for atomic vectors
biglm - Error: $ operator is invalid for atomic vectors
我正在尝试 运行 一个非常大的数据集(几百万行)上的广义线性模型。然而,R 似乎无法处理分析,因为我不断收到内存分配错误(无法分配大小向量等)。
数据适合 RAM,但似乎太大而无法估计复杂模型。作为解决方案,我正在探索使用 ff 包将 r 的内存存储机制替换为磁盘存储。
我已经成功(我认为)将数据卸载到我的硬盘上,但是当我尝试估计 glm(通过 biglm 包)时,我收到以下错误:
Error: $ operator is invalid for atomic vectors
我不确定为什么在使用 bigglm 函数时会收到此特定错误。当我 运行 完整数据集上的 glm 时,它并没有给我这个特定的错误,尽管 r 可能 运行 在它达到 "operator is invalid" 错误之前内存不足触发。
我在下面提供了示例数据集和代码。请注意,标准 glm 运行s 在这个示例数据上就很好。使用biglm时出现问题。
如果您有任何问题,请告诉我。
提前致谢!
#Load required packages
library(readr)
library(ff)
library(ffbase)
library(LaF)
library(biglm)
#Create sample data
df <- data.frame("id" = as.character(1:20), "group" = rep(seq(1:5), 4),
"x1" = as.character(rep(c("a", "b", "c", "d"), 5)),
"x2" = rnorm(20, 50, 1), y = sample(0:1, 20, replace=T),
stringsAsFactors = FALSE)
#Write data to file
write_csv(df, "df.csv")
#Create connection to sample data using laf
con <- laf_open_csv(filename = "df.csv",
column_types = c("string", "string", "string",
"double", "string"),
column_names = c("id", "group", "x1", "x2", "y"),
skip = 1)
#Use LaF to import data into ffdf object
ff <- laf_to_ffdf(laf = con)
#Fit glm on data stored in RAM (note this model runs fine)
fit.glm <- glm(y ~ factor(x1) + x2 + factor(group), data=df,
family="binomial")
#Fit glm on data stored on hard-drive (note this model fails)
fit.big <- bigglm(y ~ factor(x1) + x2 + factor(group), data=ff,
family="binomial")
您使用了错误的家庭参数。
library(ffbase)
library(biglm)
df <- data.frame("id" = factor(as.character(1:20)), "group" = factor(rep(seq(1:5), 4)),
"x1" = factor(as.character(rep(c("a", "b", "c", "d"), 5))),
"x2" = rnorm(20, 50, 1), y = sample(0:1, 20, replace=T),
stringsAsFactors = FALSE)
d <- as.ffdf(df)
fit.big <- bigglm.ffdf(y ~ x1 + x2 , data = d,
family = binomial(link = "logit"), chunksize = 3)
我正在尝试 运行 一个非常大的数据集(几百万行)上的广义线性模型。然而,R 似乎无法处理分析,因为我不断收到内存分配错误(无法分配大小向量等)。
数据适合 RAM,但似乎太大而无法估计复杂模型。作为解决方案,我正在探索使用 ff 包将 r 的内存存储机制替换为磁盘存储。
我已经成功(我认为)将数据卸载到我的硬盘上,但是当我尝试估计 glm(通过 biglm 包)时,我收到以下错误:
Error: $ operator is invalid for atomic vectors
我不确定为什么在使用 bigglm 函数时会收到此特定错误。当我 运行 完整数据集上的 glm 时,它并没有给我这个特定的错误,尽管 r 可能 运行 在它达到 "operator is invalid" 错误之前内存不足触发。
我在下面提供了示例数据集和代码。请注意,标准 glm 运行s 在这个示例数据上就很好。使用biglm时出现问题。
如果您有任何问题,请告诉我。
提前致谢!
#Load required packages
library(readr)
library(ff)
library(ffbase)
library(LaF)
library(biglm)
#Create sample data
df <- data.frame("id" = as.character(1:20), "group" = rep(seq(1:5), 4),
"x1" = as.character(rep(c("a", "b", "c", "d"), 5)),
"x2" = rnorm(20, 50, 1), y = sample(0:1, 20, replace=T),
stringsAsFactors = FALSE)
#Write data to file
write_csv(df, "df.csv")
#Create connection to sample data using laf
con <- laf_open_csv(filename = "df.csv",
column_types = c("string", "string", "string",
"double", "string"),
column_names = c("id", "group", "x1", "x2", "y"),
skip = 1)
#Use LaF to import data into ffdf object
ff <- laf_to_ffdf(laf = con)
#Fit glm on data stored in RAM (note this model runs fine)
fit.glm <- glm(y ~ factor(x1) + x2 + factor(group), data=df,
family="binomial")
#Fit glm on data stored on hard-drive (note this model fails)
fit.big <- bigglm(y ~ factor(x1) + x2 + factor(group), data=ff,
family="binomial")
您使用了错误的家庭参数。
library(ffbase)
library(biglm)
df <- data.frame("id" = factor(as.character(1:20)), "group" = factor(rep(seq(1:5), 4)),
"x1" = factor(as.character(rep(c("a", "b", "c", "d"), 5))),
"x2" = rnorm(20, 50, 1), y = sample(0:1, 20, replace=T),
stringsAsFactors = FALSE)
d <- as.ffdf(df)
fit.big <- bigglm.ffdf(y ~ x1 + x2 , data = d,
family = binomial(link = "logit"), chunksize = 3)