2017-09-11 27 views
0

関数内の関数に引数を渡す際に問題があります。代わりに引数の値が渡されず、 "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 

答えて

0

あなたの問題は、値が正しく渡されていないということではありません。これは次の出力を与える

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 ...)構築物が与えられるあなたは、いくつかのprint文を追加することによってことを確認することができますインデックスではなく、リスト内のエントリの値を指定します。 Rで
  2. 配列のインデックスは、これらの修正1ではなく0

で始まる:

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 
関連する問題