R 如何存储大型数据集?

R 如何存储大型数据集?,r,bass,R,Bass,我使用的是巴斯扩散模型,通过做一个for循环,我找到了大约5000个产品的参数m、p和q。手动将这些参数放入excel表格中需要做大量的工作。有人知道在R中存储这些值的简单方法吗?比如在桌子上?这是我的代码: PID=unique(TotalBass4$ProdID) BassStored=NULL k=0 pidlistNAs=NULL for(pid in PID){ k=k+1 out <- lm(Sales ~ Cumsaleslag + Cumsalessqrt, da

我使用的是巴斯扩散模型,通过做一个for循环,我找到了大约5000个产品的参数m、p和q。手动将这些参数放入excel表格中需要做大量的工作。有人知道在R中存储这些值的简单方法吗?比如在桌子上?这是我的代码:

PID=unique(TotalBass4$ProdID)

BassStored=NULL
k=0
pidlistNAs=NULL
for(pid in PID){
  k=k+1
  out <- lm(Sales ~ Cumsaleslag + Cumsalessqrt, data=subset(TotalBass4,subset=ProdID==pid))
  P1a <- out$coef[1]
  P1b <- out$coef[2]
  P1c <- out$coef[3]
  P1mplus <- (-P1b+sqrt(P1b**2-4*P1a*P1c))/(2*P1c)
  P1mminus <- (-P1b-sqrt(P1b**2-4*P1a*P1c))/(2*P1c)
  m <- P1mminus
  p <- 1/m
  q <- P1b+p
  cmsl=subset(TotalBass4,subset=ProdID==pid)$Cumsaleslag
  Spred <- Bassmodel(p, q, m, cmsl,T=30)$Sales
  Spred <- ts(Spred)
  BassStored[[k]]=list(parm=c(m,p,q),ProdID=pid) ## Spred=Spred
  names(BassStored[[k]]$parm)=c("m","p","q")
  if(is.na(P1c))
  pidlistNAs=c(pidlistNAs,pid)
  if((k%%10)==0)
  print(k)
  }
PID=unique(TotalBass4$ProdID)
已存储的数据=空
k=0
pidlistNAs=NULL
用于(pid中的pid){
k=k+1

out示例的一些可再现数据:

set.seed(2017-12-20)

p <- runif(10, min=0.006293, max=0.00689)
m <- runif(10, min=67380.15, max=68980.95)
q <- runif(10, min=0.61809, max=0.65804)

lapply(1:10, function(i) {
  list(parm=c(m=m[i], p=p[i], q=q[i]), ProdID=i)
}) -> BassStored
我们可以将其转换为数据帧:

do.call(
  rbind.data.frame,
  lapply(1:length(BassStored), function(i){
    as.list(unlist(BassStored[i]))
  })
) -> xdf

xdf
##      parm.m      parm.p    parm.q ProdID
## 2  67860.06 0.006689309 0.6468014      1
## 21 68054.35 0.006451261 0.6286121      2
## 3  68640.19 0.006372309 0.6181186      3
## 4  67829.24 0.006541486 0.6551225      4
## 5  68807.85 0.006517481 0.6454875      5
## 6  67886.29 0.006382578 0.6194927      6
## 7  67542.34 0.006625390 0.6212089      7
## 8  67635.12 0.006566107 0.6239669      8
## 9  67878.34 0.006826642 0.6545225      9
## 10 68778.44 0.006609701 0.6287901     10
清理名称:

xdf <- setNames(xdf, c("m", "p", "q", "ProdID"))

xdf
##           m           p         q ProdID
## 2  67860.06 0.006689309 0.6468014      1
## 21 68054.35 0.006451261 0.6286121      2
## 3  68640.19 0.006372309 0.6181186      3
## 4  67829.24 0.006541486 0.6551225      4
## 5  68807.85 0.006517481 0.6454875      5
## 6  67886.29 0.006382578 0.6194927      6
## 7  67542.34 0.006625390 0.6212089      7
## 8  67635.12 0.006566107 0.6239669      8
## 9  67878.34 0.006826642 0.6545225      9
## 10 68778.44 0.006609701 0.6287901     10

欢迎使用SO!请阅读并…然后编辑您的问题!您正在寻找rbind或rbind.data.frame函数谢谢!我将查看这些函数查看
split()
lappy()
的组合。另一个变体是使用
by()
(我更喜欢使用
split()
lappy())
以更好地控制结果的形式)。即使是粘贴到q wld帮助中的
dput(head(TotalBass4))
的输出也会给您带来更多帮助。非常感谢您的帮助,它很有效!!@hrbrmstr
xdf <- setNames(xdf, c("m", "p", "q", "ProdID"))

xdf
##           m           p         q ProdID
## 2  67860.06 0.006689309 0.6468014      1
## 21 68054.35 0.006451261 0.6286121      2
## 3  68640.19 0.006372309 0.6181186      3
## 4  67829.24 0.006541486 0.6551225      4
## 5  68807.85 0.006517481 0.6454875      5
## 6  67886.29 0.006382578 0.6194927      6
## 7  67542.34 0.006625390 0.6212089      7
## 8  67635.12 0.006566107 0.6239669      8
## 9  67878.34 0.006826642 0.6545225      9
## 10 68778.44 0.006609701 0.6287901     10
write.csv(xdf, "bassmodel.csv")