在 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==1
时factorlist(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)))]
}
我是 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==1
时factorlist(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)))]
}