是否可以定义一个“函数”并将其插入“公式”以在R中构造一个“ model.frame”?

时间:2019-02-24 18:32:44

标签: r dataframe

我试图通过定义一个在公式中使用它的函数来提取R中的model.frame

library(Formula)
df <- data.frame(c = LETTERS[1:2], a = c(74, 80), b = c(8, 10))
soln <- function(x, y){
     A <- matrix(c(1, 1, 1, -2), nrow=2)
     B <- matrix(c(x, y), nrow=2)
     return((as.matrix(solve(A)%*%B))[1,])
}
F1 <- Formula::Formula(c ~ . | (soln(a, b)))
mf <- stats::model.frame(F1, data = df)
mf
  c  a  b  soln(a, b)
1 A 74  8  76.000000
2 B 80 10   8.666667

此处mf提供的data.framesoln()函数的实际值不匹配。实际上soln(74, 8) = 52soln(80, 10) = 56.66667,但在mf中却显示768.666667。此函数在模型公式中如何工作?这样可以定义一个函数来在model.frame中获取正确的值吗?

1 个答案:

答案 0 :(得分:2)

我们可以遍历行序列以获得预期的输出

do.call(rbind, lapply(seq_len(nrow(df)), function(i) model.frame(F1, data = df[i,])))
#  c  a  b soln(a, b)
#1 A 74  8   52.00000
#2 B 80 10   56.66667

或使用tidyverse

library(tidyverse)
df %>% 
   group_split(rn = row_number()) %>%
   map_df(~ model.frame(F1, data = .x))
#  c  a  b rn soln(a, b)
#1 A 74  8  1   52.00000
#2 B 80 10  2   56.66667