2016-04-16 7 views
0

各ステップのdata.frame行を減らしながら、データセットの分散を繰り返し評価する必要があります。例ループ内の入力データフレームを段階的に減らす

data <- matrix(runif(100),10,10) 
perc <- list("vector") 
sums <- sum(data) 

for (i in 1:nrow(data)) {  
    data <- data[-1,] 
    perc[[i]] <- sum(data)/sums # in reality, here are ~8 additonal lines of code 
} 

として、私はそのdataがステップごとに再初期化され、そしてdataが空になったときにループが、エラーで壊れることを好みません。 だから質問は以下のとおりです。?最後の行は、データから削除される前に、(インクリメント方法で作業をdoesntのtmp <- data[-c(1:i),]のようなもの、 2. data <- data[-1,]を表現する方法 1は、ループを停止するが方法です

答えて

1
?あなたは上記のコードは、元のコードと同じ結果が得られますが、エラーメッセージなしと dataを変更せずに

set.seed(123) 
data <- matrix(runif(100),10,10) 
sums <- sum(data) 
perc <- lapply(2:nrow(data),function(x) sum(data[x:nrow(data),]/sums)) 

試みることができる

perc1 <- list() 
for (i in 1:nrow(data)) {  
    data <- data[-1,] 
    perc1[[i]] <- sum(data)/sums 
} 
identical(perc,perc1) 
#[1] TRUE 

あなたがループ内の他の計算を実行するために、forループを保持したい場合は、あなたが試みることができる:

for (i in 2:nrow(data)) { 
    perc[[i-1]] <- sum(data[i:nrow(data),])/sums 
    # do more stuff here 
} 
identical(perc,perc1) 
#[1] TRUE 

あなたはおそらく、ループ内の他の計算のためのループインデックスiをします使用している場合それをi-1に置き換える必要があります。それは計算されるものに依存するかもしれません。

1

あなたはlapply

res <- lapply(2:nrow(data), function(i)sum(data[i:nrow(data),])/sums) 
1

あなたは、このようなループ部作成することができます使用することができます。

for (i in 2:nrow(data)) {  
    perc[[i - 1]] <- sum(data[i:nrow(data),])/sums # in reality, here are ~8 additonal lines of code 
} 
関連する問題