2015-03-02 63 views
1

我試圖生成幾行文本,其中的數字在文本的末尾依次變化。我正在使用「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 = 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循環以實現此任務。謝謝。

回答

4

你的邏輯有點偏離。它在p循環中循環600次,然後遞增ij。你可以解決它的方法之一是通過添加計數器,像

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 
    } 
} 
+0

非常感謝! – 2015-03-02 19:54:32

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"