Другой результат с использованием model.matrix для функции в R
Я пытаюсь использовать model.matrix в функции (я не буду показывать всю функцию, только интересующую ее часть), но я замечаю, что результат для model.matrix отличается, когда эта команда используется внутри функции. Вот код:
df <- data.frame(a=1:4, b=5:8, c= 9:12)
model.matrix(a~.,data=df)
#The outcome is:
(Intercept) b c
1 1 5 9
2 1 6 10
3 1 7 11
4 1 8 12
attr(,"assign")
[1] 0 1 2
#Using model.matrix inside in a function
#Entries for function are a dataframe and a dependent var.
fun1 <- function(DF,vdep){
model.matrix(vdep ~.,data=DF)
}
fun1(df,df$a)
(Intercept) a b c
1 1 1 5 9
2 1 2 6 10
3 1 3 7 11
4 1 4 8 12
attr(,"assign")
[1] 0 1 2 3
#As you can see the outcome includes dependent var (a).
Почему эти результаты отличаются? Благодарю.
1 ответ
Решение
Во-первых, вы "регрессируете" (из-за отсутствия лучшего термина) a
против всего остального. Внутри функции вы регрессируете vdep
против всего остального, в том числе a
, Ваша функция по сути просто делает model.matrix(1:4 ~.,data=df)
, Аргумент формулы является "строкой" и не распознает переменные такими, какими вы их видите.
Вы можете изменить свою функцию следующим образом
fun2 <- function(DF,vdep){
model.matrix(as.formula(paste(vdep, "~ .")), data = DF)
}
fun2(df, "a")
(Intercept) b c
1 1 5 9
2 1 6 10
3 1 7 11
4 1 8 12
attr(,"assign")
[1] 0 1 2