2017-01-04 2 views
0
whatpercent <- function(x) { 
i<-1 
for(i in length(x)) { 
if(x[i]<= mean(x)+sd(x)) { 
vec <- c(vec,x[i]) 
} 
else{ 
next 
} 
} 
percent <- length(vec)/length(x) 
percent <- percent * 100 
return(percent) 
} 

さて、私は、私が使用したときと同じものを取得するように見える動作しません人口の何パーセント見つけるための私のR関数は平均値のkの標準偏差内にある、

whatpercent(mydata,1) whatpercent(mydata,2) whatpercent(mydata,3) ... 

何ができますか問題?

+1

「for(i in 1:length(x)){....}」を試してください。あなたはコードをループしません。 – Alex

+0

Yeh ofc!しかし、今度は長さ(vec)> =長さ(x)を得る – Xenidia

+3

あなたは 'x'という引数を1つ取るように関数を定義しますが、' whatpercent(mydata、1) ')。 – bouncyball

答えて

2

ここでは、あなたが望むものを達成するための簡単な機能があります。このようなタスクでは、ループを回避するためにベクトル化された関数を使用する必要があります。また、コードをはるかにクリーンで読みやすくします。

whatpercent <- function(x, k) { 
    mean(abs(x - mean(x)) <= sd(x) * k) 
} 

#Example 
x <- rnorm(100) 
whatpercent(x,2) 
[1] 0.95 
+0

'ifelse'コールの前に' mean(x) 'と' sd(x) 'を格納する方が効率が良いかどうかについての考えはありますか? – bouncyball

+0

'ifelse'は必要ありません。ただ条件を使用してください。 –

+1

真実、もっと簡単です;) – Alex

関連する問題