参数未传递给函数中的函数

时间:2017-09-11 22:05:09

标签: r

我无法将参数传递给函数中的函数。不传递参数的值而是“n”和“x [i]”。

A <- function(n){

  x=rep(0:n)
  for(i in x){
    x[i]=cGCD(n,x[i])
  }
  return (sum(x)/(n+1))

}

cGCD <- function(n,m){

  if((m==n) || (m==0)){
    return (1)
  }else{
    r = n %% m
    return (1 + cGCD(m,r))
  }
}

我的错误:

A(10)
    Error in if ((m == n) || (m == 0)) { : 
      missing value where TRUE/FALSE needed

1 个答案:

答案 0 :(得分:0)

您的问题不是没有正确传递值。您可以通过添加一些print语句来检查:

A <- function(n){

  x=rep(0:n)
  for(i in x){
    x[i]=cGCD(n,x[i])
  }
  return (sum(x)/(n+1))

}

cGCD <- function(n,m){
  print(n)  # Added for debugging
  print(m)  # Added for debugging
  if((m==n) || (m==0)){
    return (1)
  }else{
    r = n %% m
    return (1 + cGCD(m,r))
  }
}

这给出了以下输出:

A(10)
[1] 10
integer(0)
Error in if ((m == n) || (m == 0)) { : 
  missing value where TRUE/FALSE needed

不,这里有两个问题:

  1. for (... in ...)构造为您提供列表中条目的值,而不是索引。
  2. R中的数组索引从1开始而不是0。
  3. 解决这些问题:

    A <- function(n){
    
      x=rep(0:n)
      for (i in 1:length(x)) {  # i is now an index from 1 to 10, rather than the values of x, which are all zeros.
        x[i]=cGCD(n,x[i])
      }
      return (sum(x)/(n+1))
    
    }
    
    cGCD <- function(n,m){
    
      if((m==n) || (m==0)){
        return (1)
      }else{
        r = n %% m
        return (1 + cGCD(m,r))
      }
    }
    

    输出正如您所料:

    A(10)
    [1] 2.545455