2017-01-26 10 views
0

Rには、変換関数を変数の1つに適用して式を定義できるようにする機能があります。たとえば、次の式では、対数変換は変数bに適用されます。ユーザ定義の数式関数を作成する方法R

y ~ a + log(b) + c 

どのように1はI()を使用せずにRで独自の数式関数を定義していますか?たとえば、ユーザ定義関数fooaに適用すると、次の式になります。

y ~ foo(a) + b 
+0

通常の関数を定義して呼び出すのと似ていると私は信じています –

+1

'func < - function(x)x; form < - as.formula( "mpg〜func(cyl)+ am"); lm(形式、データ= mtcars) 'OR' lm(mpg〜func(cyl)+ am) ' –

答えて

0

あなた R式に独自の関数を使用することができます。

例関数:

foo <- function(x) 
    log(x)^2 

データ:

set.seed(1) 
dat <- data.frame(y = rnorm(5), x = rgamma(5, 2)) 

式及びデータに基づくモデルの行列を作成する:

mod <- model.matrix(y ~ 1 + foo(x), data = dat) 
mod 
# (Intercept)  foo(x) 
# 1   1 0.16837521 
# 2   1 0.02222275 
# 3   1 0.68509896 
# 4   1 0.01936180 
# 5   1 0.14758002 
# attr(,"assign") 
# [1] 0 1 

機能を実際のデータに適用される:

identical(foo(dat$x), unname(mod[ , "foo(x)"])) 
# [1] TRUE 
関連する問題