Использование аргументов функции в update.formula - PullRequest
5 голосов
/ 31 июля 2009

Я пишу функцию, которая принимает две переменные и отдельно регрессирует каждую из них на набор элементов управления, выраженных в виде односторонней формулы. Прямо сейчас я использую следующее, чтобы создать формулу для одной из регрессий, но она выглядит немного взломанной:

foo <- function(x, y, controls) {
    cl <- match.call()
    xn <- cl[["x"]]
    xf <- as.formula(paste(xn, deparse(controls)))
}

Я бы предпочел сделать это, используя update.formula(), но, конечно, update.formula(controls, x ~ .) и update.formula(controls, as.name(x) ~ .) не работают. Что мне делать?

Ответы [ 2 ]

5 голосов
/ 31 июля 2009

Вот один из подходов:

right <- ~ a + b + c
left <- ~ y 
left_2 <- substitute(left ~ ., list(left = left[[2]]))

update(right, left_2)

Но я думаю, вам придется либо вставлять текстовые строки вместе, либо использовать замену. Насколько мне известно, нет функций для создания одной двусторонней формулы из двух односторонних формул (или аналогичных эквивалентов).

1 голос
/ 31 июля 2009

Я не уверен насчет update.formula(), но я использовал подход, который вы использовали здесь, для вставки текста и преобразования его через as.formula в прошлом с успехом. Мое чтение help(update.formula) не заставляет меня думать, что вы можете заменить левую сторону по своему желанию.

Наконец, доверьтесь диспетчерскому механизму. Если ваш объект имеет формулу типа, просто вызовите update, что предпочтительнее явного update.formula.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...