2017-03-15 20 views
1

私はRのforループで作業していますが、結果をベクトルに格納する必要がありました。私はこれがかなり一般的な答えであることを知っています、そして、私の問題はそこにはありませんが、順序を進めましょう。小数点付きのループと結果をベクトルに格納

私はそれらのデータを得た:

# here the data 
alpha <- c(1,2,3,4,5,6) 
beta <- c(0.1,0.5,0.3,0.4,0.5,0.6) 
data <- data.frame(alpha, beta) 

そして私は、ある一定の閾値を超えるデータを選択する簡単な関数ます

# here the function 
funny <- function(x,k) 
{x[x[,2]>=k,]} 

# here an example of the function 
funny(data,0.5) 

     alpha beta 
2  2 0.5 
5  5 0.5 
6  6 0.6 

をしかし私が欲しいのは行く行の数ですしきい値を超えると、次のようになります。

# here the result wanted 
nrow(funny(data,0.5)) 
[1] 3 

彼はkの変化、関数のパラメータ?そして結果をベクトルにしたいと思います。私は

For loop in R with increments

Saving results from for loop as a vector in r

を見て、ループ用に作成されたと私は、この作成された:すべての最初のすべてがすべての権利である場合を見てみましょう:

# here the sequence 
s <-seq(0.1,0.6, by = 0.1) 

# here the I loop 
for(i in s) {print(nrow(funny(data,i)))} 
[1] 6 
[1] 5 
[1] 4 
[1] 4 
[1] 3 
[1] 1 

をしかし、明確にこれではありませんベクトルに格納されます。問題はここにあります。私が試した:

# already written sequence 
s <-seq(0.1,0.6, by = 0.1) 

# here the empty vector 
vec <- vector("numeric") 

# here the II problematic loop 
for(i in s) {vec[i]<-(nrow(funny(data,i)))} 
vec 

そして、ここでの結果は私が[1] 6 5 4 4 3 1

さらに[1] 0 0 0 0 0 0

に関する情報のようなもの期待、したくない:

# sequence * 10 
s <-seq(1,6, by = 1) 

# here the vector 
vec <- vector("numeric") 
# and the III loop, that it works now. 

for(i in s) {vec[i]<-(nrow(funny(data,i/10)))} 
vec 
[1] 6 5 5 4 3 1 

:私はこのような何かを試してみました をしかし、私はなぜこのIIIが働いているのか、なぜIIループがないのか理解できないので、これは気に入らない。

私は何をしないのですか?

答えて

3

は、私たちはなぜ、あなたのループIIが動作していない限り、ベクター

sapply(s, function(x) nrow(funny(data, x))) 

#[1] 6 5 4 4 3 1 

を返しますどのsapplyで試すことができます。あなたは、

for(i in s) { 
    print(i) 
} 

を行う場合は、II vec[i] <-、あなたが実際には正しくない最初のケースでvec[0.1]をしているあなたのループに格納しようとしているとき、あなたはとても

[1] 0.1 
[1] 0.2 
[1] 0.3 
[1] 0.4 
[1] 0.5 
[1] 0.6 

を取得します。

seq_along(s)#[1] 1 2 3 4 5 6を返します

for(i in seq_along(s)) {vec[i]<-(nrow(funny(data,s[i])))} 
vec 
#[1] 6 5 4 4 3 1 

を試してみてください、あなたのループを修正します。

関連する問題