我正在尝试生成几行文本,其中数字在文本末尾按顺序变化。我正在使用“paste()”来编写文本并尝试使用“for循环”来顺序更改文本末尾的数字。现在,我想写几百行,所以我创建一个列表并尝试填充列表。举个例子,我想写一下:
“
$DATA ESTIM1101001.csv
$DATA ESTIM1101002.csv
.
.
.
$DATA ESTIM11010020.csv
$DATA ESTIM1102001.csv
$DATA ESTIM1102002.csv
$DATA ESTIM1102003.csv
.
.
.
$DATA ESTIM11020020.csv
$DATA ESTIM11030001.csv
$DATA ESTIM11030002.csv
.
.
.
$DATA ESTIM110300020.csv
详细说明,在ESTIM110i00j.csv中i = 1到30且j = 1到20
所以30 * 20 =总共600行。
我试图通过以下代码执行此操作:
b <- list()
for (i in 1:30) {
for(j in 1:20) {
for(p in 1:600){
b[[p]]<-(paste("$DATA",paste("ESTIM110",i,"00",j,".csv",sep=""),sep=" "))}}}
然而,对于所有600行,我最终得到$ DATA ESTIM1010300020.csv。我怀疑是我没有正确编写for循环来改变数字。非常感谢您帮助我们清楚地理解for循环以实现此任务。谢谢。
答案 0 :(得分:5)
这是一种矢量化方法,使用expand.grid
查找数字序列的所有组合,并sprintf
格式化最终字符串:
ids <- expand.grid(1:30, 1:20)
sprintf("$DATA ESTIM110%0d00%0d.csv", ids[,1], ids[,2])
示例输出:
> head(sprintf("$DATA ESTIM110%0d00%0d.csv", ids[,1], ids[,2]))
[1] "$DATA ESTIM1101001.csv" "$DATA ESTIM1102001.csv" "$DATA ESTIM1103001.csv" "$DATA ESTIM1104001.csv"
[5] "$DATA ESTIM1105001.csv" "$DATA ESTIM1106001.csv"
答案 1 :(得分:4)
你的逻辑有点偏。它会在p
或i
递增之前循环遍历j
循环600次。解决这个问题的一种方法是添加一个计数器,比如
b <- list()
count <- 1
for (i in 1:30) {
for(j in 1:20) {
b[[count]]<-(paste("$DATA",paste("ESTIM110",i,"00",j,".csv",sep=""),
sep=" "))
count <- count + 1
}
}