2017-10-06 8 views
1

は私がmy_lmのような機能を持っていると思います)(更新するために、引数としてFへの引数を使用し、以下に例示内部関数Fは、

Error in model.frame.default(formula = update(old = base_formula, new = enquo(response) ~ : 
    object is not a matrix 

私はrlangを誤用していると思われますが、この問題を解決するクォート、クォート解除、および定式化の組み合わせがわかりません。

編集:私は走ったかのように所望の出力は次のようになります。

lm(formula = Sepal.Length ~ Sepal.Width + Petal.Length, 

データ=アイリス)

EDIT2:私はまた、私はこの問題を解決するためにrlangを使用して溶液中で本当に興味が、明確にすべき問題は、paste,gsub、およびformulaを使用するソリューションよりも、updateで解決されます。ここで

+0

my_lmのためのあなたの予想される出力は何ですか?上記の – csgroen

+0

を明かしました – rcorty

答えて

2

は、quosuresは基本的にも式であり、あなたは彼らとの定期的な式を作成しようとしているので、混乱のビットであるように思わ

base_formula <- new_formula(lhs = quote(potato), 
          rhs = quote(Sepal.Width + Petal.Length)) 

my_lm <- function(response) { 
    newf <- new_formula(get_expr(enquo(response)), quote(.)) 
    lm(formula = update(old = base_formula, new = newf), 
    data = iris) 
} 

my_lm(response = Sepal.Length) 

を働く何か。そしてnew_formulaは、!!の展開を許可していないようです。

あなたが本当に左側の変更では、単に興味があるなら、このようなものは、より直接的な

my_lm <- function(response) { 
    newf <- base_formula 
    f_lhs(newf) <- get_expr(enquo(response)) 
    lm(formula = get_expr(newf), 
    data = iris) 
} 
かもしれません