Можно ли определить `функцию` и вставить ее в` формулу`, чтобы построить `model.frame` в R? - PullRequest
0 голосов
/ 24 февраля 2019

Я пытался извлечь model.frame в R, определив функцию для использования в формуле:

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 таким образом?

1 Ответ

0 голосов
/ 24 февраля 2019

Мы можем перебрать последовательность строк, чтобы получить ожидаемый результат

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...