2017-02-17 9 views
0

質問は次のとおりです。 番号がプライムであるかどうかを確認できる機能を持つパッケージがあります。2つの整数を取り込む関数を作成します(両方に1のデフォルト値を設定します)。この関数は、2つの値の間の素数の数を計算する必要があります。私のコードがある :関数を実行するときに1を除外する方法は?

install.packages("schoolmath") 
library(schoolmath) 
is.prim(3) 

prime <- function(x) 
{ 

    p <- 0 
    p1 <- ifelse(is.prim(x) == "TRUE", p + 1, p) 
    return(sum(p1 == 1)) 
    } 
prime(seq(1,10,1)) 

私は機能を実行したとき、それは真実ではありません素数だけでなく、として1をカウントします。それを効率的に機能から排除する方法は?

+3

'ifelse(X> 1&is.prim(X)== TRUE、P + 1、p) '?ところで、 "TRUE"はTRUEと同じではありません – G5W

答えて

0

is.primベクターを用いた作品やsum機能のドキュメントを見ているので、あなたは、あなたの関数を少し簡略化することができます。

論理真の値が1、ゼロとして偽の値とみなされています。ここ

ベクターに素数をカウントする機能である

count.primes <- function(x) { 
    sum(x > 1 & is.prim(x)) 
} 

例:

count.primes(1:10) 
# [1] 4 

count.primes(1:20) 
# [1] 8 
関連する問題