是否有可能定义一个`function`并将其插入`formula`中以在R中构造一个`model.frame`?

问题描述 投票:1回答:1

我试图通过定义一个在公式中使用它的函数来提取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中获取正确的值?

r dataframe
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.