在 R 中编写一个函数来找到完美的数字

Write a function in R to find perfect numbers

我是 R 的初学者,正在尝试以下问题:

在 R 中创建一个函数 输入一个自然数 N 和 returns 作为输出列表 1 到 N 之间的所有完全数。

这里有 3 个步骤: 1.检查因素列表 2.检查是否为完美数 3.check 从 1 到 10000

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

我花了几个小时还是没弄清楚我的错误,请帮忙。谢谢!

i==1factorlist(i)的输出是字符。

您的代码中有很多循环和 ifs。你可以这样做

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)))]
}