2016-06-17 1 views
0

私は一連の値に対してforループを実行し、簡単な計算を実行したいと思います。例えば、ここでは、ベクトルxから-10までの範囲を持っています。xに与えられた値よりも小さい値の数を計算したいと思います。forループのインデックス付けは負の値で可能です

x<-seq(-10,10,1)

nums<-vector()

for (i in x) { nums[i] <- length(which(x < i)) }

しかしのみインデックスはx戻るにおいて正の値をループのためにこれを符号化されたとおりむしろWHより

nums = 11 12 13 14 15 16 17 18 19 20

nums = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

+3

Rでは、整数、負の値、文字列など、ほとんどのものに 'for'ループを実行できます。しかし、おそらく 'nums [i] 'が' i'が負のときに何を意味するのかを知るべきです...ベクトルのインデックス付けルールはforループとは関係ありません。 – Gregor

答えて

1

Rはどこ史上ループの可能性を回避するように設計されています。それに加えて、コードに構文エラーがいくつかあります...

ベクトルに沿ってループする場合は、i in seq_along(x)ではなくi in xを使用する必要があります。あなたは正の値のみに掛けた理由は、私に対してのxを比較するための-10ウィッヒ作品によってそのi in x開始インデックスですが、あなたのスタートをasignmentしない:あなたの問題を解決するには、ベクターを直接

for (i in seq_along(x)){ 
     nums[i] <- sum(x < x[i]) 
    } 

編集をインデックス化されるだろうnums[-10]のasigningは本当に適切ではありません。

+0

私はそれがコード自体の誤りだとは確信していません...私が追加した微調整はあなたの答えと同じですが、あなたのスピードは速いです: '0.023'対' 0.017' – Flammulation

+0

何が起こったの詳細を編集してくださいあなたの古いコード... – mhwh

1

あなたは、ベクターのための負のインデックスを使用している、のような何かしてみてください:

nums <- NULL 
for (i in x) { 
    nums <- c(nums, length(which(x < i))) 
} 

または:実は

nums <- NULL 
for (i in x) { 
    nums <- c(nums, sum(x < i)) 
} 

より良いを私が見たい時アプローチ以上Rこれを行う方法は、applyファミリの使用機能になります。

sapply(x, function(ele) sum(x < ele)) 
[1] 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 
0

これが働いた:原則として

x<-seq(-10,10,1)

nums<-vector()

for (i in x){ nums[i+11] <- length(which(x < i)) }

関連する問題