簡體   English   中英

是否可以定義一個“函數”並將其插入“公式”以在R中構造一個“ model.frame”?

[英]Is it possible to define a `function` and insert it in `formula` to construct a `model.frame` in R?

我試圖通過定義一個在公式中使用它的函數來提取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) = 52 soln(80, 10) = 56.66667 soln(74, 8) = 52soln(80, 10) = 56.66667 ,但是在mf中顯示為768.666667 此函數在模型公式中如何工作? 是否可以通過這種方式定義一個函數以在model.frame獲取正確的值?

我們可以遍歷行的序列以獲得預期的輸出

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM