从公式的右侧提取函数调用

时间:2015-12-04 00:03:34

标签: r

R中的几个函数专门处理公式右侧的变量的某些函数。例如s中的mgcvstrata中的survival。在我的例子中,我希望从模型矩阵中取出变量的特定函数并进行特殊处理。除了在列名称上使用grep之外,我无法看到如何执行此操作(如下所示) - 如果公式中未使用f(.),这也不起作用。有没有人有更优雅的解决方案?我查看了survivalmgcv,但我发现代码很难遵循,并且对我的需求来说太过分了。感谢。

f <- function(x) {
    # do stuff  
    return(x)
}

data <- data.frame(y = rnorm(10), 
        x1 = rnorm(10), 
        x2 = rnorm(10), 
        s = rnorm(10))

formula <- y ~ x1 + x2 + f(s)

mf <- model.frame(formula, data)
x <- model.matrix(formula, mf)

desired_x <- x[ , -grep("f\\(", colnames(x))]
desired_f <- x[ , grep("f\\(", colnames(x))]

输出:

> head(desired_x)
  (Intercept)          x1         x2
1           1  0.29864902  0.1474018
2           1 -0.03192798 -0.4424467
3           1 -0.83716557  1.0268295
4           1 -0.74094149  1.1094299
5           1  1.38706580 -0.2339486
6           1 -0.52925896  1.2866540

> desired_f
          1           2           3           4           5           6 
 0.46751965  0.65939178 -1.35835634 -0.05322648 -0.09286254  1.05423067 
          7           8           9          10 
-1.71971996  0.71743985 -0.65993305 -0.79821349 

0 个答案:

没有答案