2017-04-21 5 views
2

私はcsvファイルを読み込み、それらをrbindするループを作成しました。ループが速すぎます。read.csv

vec1 = c(0,1,3,5,9) 
vec2 = c("mom", "dad") 
c = data.frame() 

for(i in length(vec1)) 
{ 
    for (j in length(vec2)) 
    { 
    dir = paste("../data/year ", vec1[i], "/ff_", vec2[j], "_cb", vec1[i], ".csv", sep="") 
    a = read.csv(dir) 
    Sys.sleep(3) 
    c = rbind(c,a) 

    } 

} 

ただし、実行しようとすると、最後の反復の結果のみが存在します。 (すなわち、aは最後の反復からの値を持ち、caと同じです)。

これはループが速すぎるためですが、次の行に行く前にread.csvが終了するのを待たないためです。したがって、sys.sleep(3)をそこに配置します。

しかし、同じ問題が引き続き発生します。さらに、ijを手動で設定することができたため、構文は正しいはずですが、問題の内容がわかりません。

ありがとうございます!

答えて

7

ループが正しくありません。 for(i in length(vec1))は1回の繰り返ししか実行しません。正しい形式は次のとおりです。たとえばfor(i in 1:length(vec1)) はこれを試してみてください。

vec1 = c(0,1,3,5,9) 
vec2 = c("mom", "dad") 
for(i in 1:length(vec1)) 
{ 
    for (j in 1:length(vec2)) 
    { 
    print(paste(i, j)) 
    } 
} 

は、その後、あなたの文に例を繰り返します。

+0

これは恥ずかしい間違いでした。ありがとう。 – Waht

4

答えがDave2eと記載されているため、ループが正しくありません。その答えは正しいが、vec1またはvec2が長さゼロのベクトルであれば、問題を避けるためにseq_alongを使用する方がよい。あなたが本当に何回の反復

vec1 <- integer() 
vec2 <- c("mom", "dad") 

for(i in 1:length(vec1)) 
{ 
    for (j in 1:length(vec2)) 
    { 
    print(paste(vec1[i], vec2[j])) 
    } 
} 
#[1] "NA mom" 
#[1] "NA dad" 
#[1] " mom" 
#[1] " dad" 

たかっない場合:たとえば、この特定のケースで

for(i in seq_along(vec1)) 
{ 
    for (j in seq_along(vec2)) 
    { 
    print(paste(vec1[i], vec2[j])) 
    } 
} 

を、あなたも、整数イテレータを必要としません。あなたは単にベクトル要素自体をループすることができます。

vec1 <- c(0, 1) 
vec2 <- c("mom", "dad") 

for(v1 in vec1) 
{ 
    for (v2 in vec2) 
    { 
    print(paste(v1, v2)) 
    } 
} 
# [1] "0 mom" 
# [1] "0 dad" 
# [1] "1 mom" 
# [1] "1 dad" 
+0

詳細な説明とヒントをありがとう。しかし私は1つの答えを受け入れることができます>。>。申し訳ありません。 – Waht

関連する問題