wglaive 在使用MCMC方法或者其他某些迭代方法的时候,需要存储每次迭代的中间值。感觉最常用最直接的方法是使用cbind,或者rbind构造一个矩阵或者vector。但是感觉这种方法非常不直观而且很容易混淆行和列的问题。 或者是使用预先构建的矩阵/向量,然后使用for循环的indicator进行赋值。 这样也感觉很麻烦,而且会让思考落到数组上。 可以麻烦问下有内建的函数或者package什么的能像c++标准模板方法那样,类似于data.add(result)对每次迭代的数据进行保存吗? 在查询过程中找到了这篇文章 https://cran.r-project.org/web/packages/magicfor/vignettes/magicfor.html 但是感觉这个解决方案还是有种曲线救国的感觉,非常麻烦而且不直观。 还请大家指教。
wglaive tctcab 不出意外的话应该是vector吧,这个解决了应该就能处理绝大部分常见问题。(蒙特卡洛方法,梯度下降,em算法,等常见的需要存储迭代中间值的都能用向量解决吧)当然有泛化更好的例如能处理矩阵或者更复杂的结构就更好了。抱歉水平所限不能提出更好的例子和抽象结构
ryo tctcab 嘻嘻。 tmp <- list() for (i in 1:10){ tmp[[i]] <- vector(i) saveRDS(tmp[[i]], paste0(tmp[[i]], '.rds') ) #储存数据。 }
wglaive HarryZhu-7harryprince 谢谢,好像append是直接在数列后面进行添加对吧?感觉用起来可能有点费劲?大概是我理解不够吧,我再研究研究。不过如果是单个变量的记录的话确实很方便呢
wglaive tctcab 写了个数据框的,虽然还是不太理解[ [ i ] ]和[i,]。。。。。 但是至少能用。。。 record <- data.frame(x=double(),u=double()) for (i in 1:n) { X=update_x(X) u=update_u(u) record[i,]=c(X,u) }
tctcab wglaive 双括号表示选择单个元素,里面的index只能为1,单括号表示选择多个元素,index可以为范围,比如1:5。 比如data.frame的话,df[[1]]表示第一列,df[,1]表示包含第一列的data.frame, list的话,lst[[1]]表示第一个成员,list[1]表示包含第一个成员的列表。 从tidyverse的角度看,data.frame类型的数据更好进行后续处理