2009-07-31 14 views
5

Piszę funkcję, która pobiera dwie zmienne i oddzielnie regresuje każdą z nich na zestawie kontrolek wyrażonych jako jednostronna formuła. Teraz używam następujące zrobić wzór na jednej z regresji, ale czuje się nieco włamał się:Używanie argumentów funkcji w update.formula

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

wolałbym zrobić to za pomocą update.formula(), ale oczywiście update.formula(controls, x ~ .) i update.formula(controls, as.name(x) ~ .) nie działają. Co powinienem robić?

Odpowiedz

5

Oto jeden sposób:

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

update(right, left_2) 

Ale myślę, że trzeba albo ciągów tekstowych pasta razem, albo użyć zamiennika. Zgodnie z moją wiedzą nie ma funkcji tworzenia jednej dwustronnej formuły z dwóch jednostronnych formuł (lub podobnych odpowiedników).

+0

Zastanawiam się, czy istnieje osiem lat później lepsza odpowiedź, oparta na kwotowaniach lub ogólnie na pakiecie rlang? – rcorty

1

Nie jestem pewien co do update.formula(), ale użyłem podejścia, które tu stosujesz, do wklejania tekstu i konwertowania go przez as.formula w przeszłości z powodzeniem. Moje czytanie help(update.formula) nie pozwala mi myśleć, że możesz zastąpić lewą stronę, jak chcesz.

Na koniec zaufaj mechanizmowi dyspozytorskiemu. Jeśli obiekt ma formułę typu, wystarczy zadzwonić pod numer update, który jest preferowany w stosunku do jawnego update.formula.

Powiązane problemy