2017-03-19 7 views
1

「評価中です」というエラーメッセージとスコープに関するいくつかのトピックです。しかし、ここではそうではないようです。他の機能の中でoptimを使用しようとしています。同じエラーを再現するために、最小の例を示します。これを避ける方法はありますか?Optim内部関数:すでに評価中であることを約束します

set.seed(123) 

df_ss = data.frame(var1 = rnorm(100), 
        var2 = rnorm(100), 
        var3 = rnorm(100), 
        var4 = rnorm(100)) 

test <- function(df_ss = df_ss, degree = 3, raw = TRUE, ...){ 
    # objective function 
    objective <- function(beta, df_ss = df_ss) { 
    op2 <- lm(formula = I(var1 - beta*var2) ~ poly(I(var3 - beta*var2), degree = degree), data = df_ss) 
    return (sum(residuals(op2)^2)) 
    } 

    ss_reg <- optim(1, fn = objective , method ="Brent",lower =-1, upper =1) 
} 


test() 
Error in model.frame.default(formula = I(var1 - beta * var2) ~ poly(I(var3 - : promise already under evaluation: recursive default argument reference or earlier problems? 

答えて

2

次のとおりです。 df_ss = df_ssを避けてください。

test <- function(dat = df_ss, degree = 3, raw = TRUE, ...){ 
    # objective function 
    objective <- function(beta) { 
    op2 <- lm(formula = I(var1 - beta*var2) ~ poly(I(var3 - beta*var2), degree = degree, raw = raw), data = dat) 
    return (sum(residuals(op2)^2)) 
    } 

    ss_reg <- optim(1, fn = objective , method ="Brent",lower =-1, upper =1) 
} 

result <- test() 
result 
# par 
# [1] -0.03866607 
# 
# value 
# [1] 80.22191 
関連する問題