2009-07-31 32 views
5

İki değişken alan ve her birini tek taraflı formül olarak ifade edilen bir kontrol kümesinde ayrı ayrı kaydeden bir işlev yazıyorum. Şu anda regresyonların biri için formülünü yapmak için aşağıdaki kullanıyorum, ama biraz yukarı kesmek hissediyor:update.formula işlev argümanlarını kullanma

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

Bu update.formula() kullanarak yapmayı tercih ediyorum, ama tabii update.formula(controls, x ~ .) ve update.formula(controls, as.name(x) ~ .) arasında çalışma Ne yapmalıyım?

cevap

5

İşte bir yaklaşımdır:

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

update(right, left_2) 

Ama birlikte ya yapıştırma dizeleri gerekecek düşünüyorum, ya da ürün kullanmayın. Bildiğim kadarıyla, iki taraflı formüller (veya benzer eşdeğerler) tarafından iki yüzlü formülü oluşturmak için hiçbir işlev yoktur.

+0

Sekiz yıl sonra daha iyi bir cevap olup olmadığını merak ettim, genel olarak kontrendikasyonlar veya rlang paketine göre? – rcorty

1

update.formula() hakkında emin değilim, ancak geçmişte yapıştırmayı yaptığınız yaklaşımı, geçmişte as.formula aracılığıyla başarıyla geçirdim. Benim help(update.formula) okumam beni sol tarafını istediğin gibi değiştirebileceğini düşünmüyor. Son olarak, sevk mekanizmasına güvenin. Nesne formülü iseniz, açık update.formula üzerinde tercih edilen update arayın.

İlgili konular