【发布时间】:2013-06-09 03:35:01
【问题描述】:
我正在使用 R 中的 for 循环模拟几个数据集,并将数据集保存在文件夹中的文本文件中。由于我需要分析这些数据集,我将这些数据从文件夹导入到 R 并进行分析。我想知道是否有任何方法可以通过将它们作为数据框保存在 R 中而不是保存和导入来进行模拟和分析。这是我的代码:
setwd("C:\\Users\\John\\Desktop\\datageneration")
kitem<-10
N<-100
disc<-rnorm(k,0,1)
diff=rnorm(k,0,1)
irtp<-function(t,a,b,pexp)
{
pexp<-1/(1+exp(-b*(t-a)))
pexp
}
for( iter in 1:20)
{
X<-mat.or.vec(N,kitem)
P<-mat.or.vec(N,kitem)
for(i in 1:N)
{
theta<-rnorm(N,0,1)
assign(paste0("theta", iter), theta)
filename1 <- paste (" theta",iter ,".txt ", sep ="")
write.table( get(paste0("theta",iter)) , file = filename1 , row.names =FALSE ,col.names = FALSE )
for(k in 1:kitem)
{
P[i,k]<-irtp(theta[i],diff[k],disc[k],pexp)
X[i,k]<-ifelse(runif(1)<P[i,k],1,0)
assign(paste0("X",iter), X) # HERE'S THE PART THAT I NEED HELP
filename2 <- paste ("X",iter ,".txt ", sep ="")
write.table( get(paste0("X",iter)) , file = filename2 , row.names =FALSE ,col.names = FALSE )
}
}
}
我要做的只是通过调用它们的名称(例如,theta1)来使用生成的数据文件(例如,theta1、theta2、theta3...、theta20)。由于我正在生成数千个数据集,我想知道是否可以在不使用 write.table 然后 read.table 函数的情况下做到这一点。如果您能帮助我,我将不胜感激。
【问题讨论】:
-
您的模拟向量(如上面的示例代码)或更复杂的结构?您是否需要保留数据,或者只生产、使用和丢弃它们就可以了?
-
感谢您询问 vaettchen。实际上我的代码比这个更复杂。我还生成了包含 100 行和 10 列以及 theta 向量的矩阵。为了简单起见,我只是发布了该代码。我仍然想将文件保存在我的代码中显示的文件夹中。但经过分析,我会删除其中一些不符合我标准的。简单地说,我想同时做这两种方式。我喜欢将数据集保存在一个文件中,也可以在不导入的情况下使用它们。对不起我的英语。我希望你明白我想做什么。
-
您正在覆盖“dat”文件 19 次。
-
不确定我是否完全理解您要做什么,但我想您需要更改内部循环中的命名,可能通过将
iter和kitem组合到 filename2 中;否则你会一直覆盖你的东西。 -
因此我想获得两套。第一组是 theta 向量(例如,20 个 theta 向量:theta1 到 theta20)。第二组是 X 矩阵(例如,20 个 X 矩阵:X1 到 X20)。每个 X 矩阵应包含 10 个项目(kitem)/列和 100 行(N)。我对 theta 部分没问题,因为它们是向量但被 X 矩阵部分卡住了。如果我可以将 iter 和 kitem 结合起来,你确定它可以解决问题吗?
标签: r for-loop saving-data