2017-03-10 8 views
0

完全数を見つけるためにRで関数を書く:私はRでの初心者ですと、次の質問しようとしています

が出力としてその 入力として自然数Nとリターンを取るRで関数を作成します 1.それは1から10000

への完全数 3.checkであるかどうかの要因 2.チェックリストを確認してください:1とN.

3つのステップがここにあります間 すべての完全数のリスト

factorlist<-function(n){ 
if(n<2){return("Invalid Input")} 
if(n%%1!=0){return("Invalid Input")} 
vec<-0 
for(i in 1:(n-1)){ 
if(n%%i==0){ 
vec[length(vec)]<-i 
vec<-c(vec,0) 
} 
} 
vec<-vec[-length(vec)] 
return(vec) 
} 

perfectcheck<-function(n){ 
if(n-sum(factorlist(n)) ==0) {return("Perfect Number")} 
else{return("Not Perfect Number")} 
} 



perfectcheckN<-function(N){ 
for(i in 1:N){ 
if(perfectcheck(i)=="Perfect Number"){ 
vec[length(vec)]<-i 
vec<-c(vec) 
} 
} 
vec<-vec[-length(vec)] 
return(vec) 
} 

と私は私が私の間違いを見つけ出すことができませんでした、まだ数時間のように過ごし、私の第三段階

Error in sum(factorlist(n)) : invalid 'type' (character) of argument 

ために、次のエラーを得た、助けてください。ありがとう!

答えて

2

factorlist(i)の出力は、i==1のときの文字です。

コードには多くのループとifがあります。することができます

facs <- function (x) { 
    x <- as.integer(x) 
    div <- seq_len(abs(x) - 1L) 
    div[x%%div == 0L] 
} 


perfectcheckN <- function(N){ 
    out <- 1:N 
    out[sapply(out, function(x) x == sum(facs(x)))] 
} 
関連する問題