Как использовать 2 разные функции в 2 разных библиотеках с одинаковыми именами - PullRequest
1 голос
/ 02 июня 2019

Я пытаюсь изучить разницу в том, как работает функция "gam" в пакете mgcv по сравнению с пакетом gam.Но я не могу запустить обе игровые функции в одном сеансе R.Я подумал, что если я введу предисловие с mgcv :: gam или gam :: gam, он сможет запустить нужную функцию, но похоже, что мне нужно отключить mgcv, чтобы запустить функцию gam в пакете gam.

library(ISLR)
library(mgcv)
library(gam)

# I get an error message when it runs this
gam.m3 <- gam::gam(wage~s(year,4)+s(age,5)+education,data=Wage)

# No error message when I detach mgcv
detach(package:mgcv)
gam.m3 <- gam::gam(wage~s(year,4)+s(age,5)+education,data=Wage)

Есть ли способ запустить обе функции гаммы в одном сеансе?

Ниже приведен вывод:

> library(ISLR)
> library(mgcv)
> library(gam)
> #I get an error message when it runs this
> gam.m3 <- gam::gam(wage~s(year,4)+s(age,5)+education,data=Wage)
Error in terms.formula(reformulate(term[i])) : 
  invalid model formula in ExtractVars
> #No error message when I detach mgcv
> detach(package:mgcv)
> gam.m3 <- gam::gam(wage~s(year,4)+s(age,5)+education,data=Wage)
Warning message:
In model.matrix.default(mt, mf, contrasts) :
  non-list contrasts argument ignored

Обновление: я перезапустил это с чистым Rсессия и история другая.Раньше я очищал рабочее пространство, но у меня не было четкого R-сеанса.Теперь, если я запускаю с чистой сессией, модель gam.m3, кажется, работает.НО - если я изменяю порядок загрузки библиотеки и загрузки gam до mgcv, я получаю ту же ошибку.Когда mgcv загружается после того, как gam загружен, я получаю это сообщение:

The following objects are masked from ‘package:gam’:

gam, gam.control, gam.fit, s

Так что я думаю, что только часть сделки по загрузке mgcv заключается в том, что вы больше не можете использовать определенные функции в gam?Это раздражает.К вашему сведению, я получаю аналогичное предупреждающее сообщение при загрузке gam после загрузки mgcv - некоторые объекты будут маскироваться из пакета: mgcv.

1 Ответ

2 голосов
/ 07 июня 2019

Как показано в моем ответе на другой ваш вопрос , вы не можете использовать gam::s.

Однако вы можете указать R оценить вызов в пространстве имен пакета gam:

library(ISLR)
library(gam)

fit1 <- gam(wage~s(year,4)+s(age,5)+education,data=Wage)

library(mgcv)

gam::gam(wage~s(year,4)+s(age,5)+education,data=Wage)
#errors

fit2 <- eval(quote(gam(wage~s(year,4)+s(age,5)+education,data=Wage)), 
               envir = asNamespace("gam"))
#works

all.equal(coef(fit1), coef(fit2))
#[1] TRUE
...