我是R的初学者,我正在尝试以下问题:
在R中创建一个以其为基础的函数 输入一个自然数N并作为输出返回列表 所有在1和N之间的完美数字。
这里有3个步骤: 1.检查因素列表 2.检查它是否是一个完美的数字 3.检查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
我花了几个小时仍然无法弄清楚我的错误,请帮忙。谢谢!
答案 0 :(得分:2)
factorlist(i)
的输出是i==1
时的字符。
你的代码中有很多循环和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)))]
}