R 创建函数时创建错误语句时遇到问题

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

我正在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,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)