2016-11-30 13 views
2

f(x)と入力したときに結果が戻り値g("x")になるように、gtmacro(gtoolsから)を使用して配置するにはどうすればよいですか?それのdefmacroが関与している(私はCプログラマだから)Rマクロ:f(x) - > g( "x")の方法

は、私は考えます...しかし、私は、またはのdefmacroせずに目標を達成するために幸せになります。

は残念ながらf <- defmacro(x, expr={ g(quote(x)) })がヒットし、ミスが...それは例えばのように、いくつかの機能のために動作しますが、他人のために失敗している

g <- function(v) { 
    eval(parse(text=paste0("f0 = lm(Sale_Price ~ ", v, ", data = d1)"))) 
    r0 <- data.frame(predict(f0, d1), d1$Sale_Price) 
    colnames(r0) <- c(v, "Sale_Price") 
    ggplot() + 
    labs(x= v, y= "Sale_Price") + 
    geom_point(data = r0, aes(get(v), Sale_Price), colour="black") + 
    geom_smooth(data = r0, method = "lm", aes(x = get(v), y Sale_Price), colour="blue", se = FALSE) 
} 

f <- defmacro(x, expr={ g(quote(x)) })が成功するように、私は上記の定義を変更することができます...しかし、それは私の質問ではありません。私は(私はgに軽度の制限で動作答えをいただければ幸いです)私はf(x)を入力すると結果は任意ユーザ定義gためg("x")の戻り値となるように、それを配置することができますか一般で知りたいです。

答えて

4

私はf(x)を入力すると、結果は 任意のユーザ定義g

f <- function(x, g) { 
    g(as.character(substitute(x))) 
} 

#using paste as an example of g  
f(a, paste) 
#[1] "a" 

eval(parse())を使用しないでくださいためg("x")の戻り値です。あなたが言語に関する知識がはるかに進歩するまで存在していることは忘れてしまいます。あなたは次のようなことをすることができます:

form <- as.formula(sprintf("Sale_Price ~ %s", v)) 
f0 <- lm(form, data = d1) 

また、研究help("aes_string")getは必要ありません。

関連する問題