我无法将参数传递给函数中的函数。不传递参数的值而是“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 :(得分: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
不,这里有两个问题:
for (... in ...)
构造为您提供列表中条目的值,而不是索引。解决这些问题:
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