我试图通过定义一个在公式中使用它的函数来提取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.frame
与soln()
函数的实际值不匹配。实际上soln(74, 8) = 52
和soln(80, 10) = 56.66667
,但在mf
中却显示76
和8.666667
。此函数在模型公式中如何工作?这样可以定义一个函数来在model.frame
中获取正确的值吗?
答案 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