R 创建函数时创建错误语句时遇到问题
我正在R中创建一个函数,用于使用方程-F=p\left(1+\frac{I}{100t}\right)^{ty}计算复利 如果任何p、I、t或y参数不是数字或负数,我需要创建错误消息,如果I超出范围0-100,则需要创建错误消息 当我尝试运行代码时,会收到错误消息: 错误:在以下位置出现意外“,” “停止”(“参数‘P’、‘i’、‘t’和‘y’必须是数字”) 如果(P,“ 我不确定如何修复它或我做错了什么。到目前为止,代码是:R 创建函数时创建错误语句时遇到问题,r,R,我正在R中创建一个函数,用于使用方程-F=p\left(1+\frac{I}{100t}\right)^{ty}计算复利 如果任何p、I、t或y参数不是数字或负数,我需要创建错误消息,如果I超出范围0-100,则需要创建错误消息 当我尝试运行代码时,会收到错误消息: 错误:在以下位置出现意外“,” “停止”(“参数‘P’、‘i’、‘t’和‘y’必须是数字”) 如果(P,“ 我不确定如何修复它或我做错了什么。到目前为止,代码是: compound <- function(P,i,t=12,y
compound <- function(P,i,t=12,y,plotit=FALSE,...){
# 1. Check arguments and throw errors here using 'if' statements
if(!is.numeric(P,i,t,y)){
stop("Argument 'P','i','t' and 'y' must be numeric")
if(P,i,t,y<0){
stop("Argument 'P','i','t' and 'y' must be non-negative")
if(i<0||i>100){
stop("'i' must be within the range 0-100 percent")
}
}
}
if(plotit==TRUE){
# 2. Do plot if necessary here according to 'plotit' argument
y <- floor(y)
f <- P*((1+(i/100*t))^t*y)
for(i in length(y)){
plot(f, type = 's')
}
}
else {
final.result <- f
# Calculate final result here
return(final.result)
}
}
composite问题是您要将四个参数传递给is.numeric(p,i,t,y)
。它只能传递一个参数
if(!all(sappy(list(P,i,t,y),is.numeric)))
这将检查所有参数是否都是数字
if(p,i,t,y=0))也会出现类似的问题
此外,还嵌套了这些if语句,这意味着第二个和第三个if语句将不会被计算。将它们从第一个if语句中移出。问题是,您正在将四个参数传递给is.numeric(p,i,t,y)
。只需要一个
if(!all(sappy(list(P,i,t,y),is.numeric)))
这将检查所有参数是否都是数字
if(p,i,t,y=0))也会出现类似的问题
此外,还嵌套了这些if语句,这意味着第二个和第三个if语句将不会被计算。将它们移出你的第一个if语句。if(!(is.numeric(p)&&is.numeric(i)&&is.numeric(t)&&is.numeric(y))
和if(p<0 | i<0 | t<0)
如果(!(is.numeric(p)&&is.numeric(i)&&is.numeric(t)&&is.numeric(t)&is.numeric(y)
和if(p<1240 1240)