Hapus transformasi dari rumus

Saya memiliki rumus model yang mencakup transformasi, beberapa di antaranya dapat disarangkan. Saya ingin menghapus semua transformasi dari rumus, hanya menyisakan variabel mentah.

E.g.,

log10(y) ~ sin(log10(x)) + log(x1)

akan menjadi:

y ~ x + x1

Saya membayangkan ini bisa dilakukan dengan ekspresi reguler, tapi saya ingin tahu apakah ada fungsi yang sudah ada sebelumnya atau apakah nama variabel mentah disimpan di suatu tempat (misalnya, terms), dari mana rumusnya dapat direkonstruksi. Jika tidak, mungkin seseorang dapat membantu dengan regex jika ada yang bersarang...?

Sayangnya, transformasi variabel di luar rumus bukanlah pilihan.

Sangat dihargai.


person jslefche    schedule 02.03.2016    source sumber


Jawaban (1)


Ada fungsi, all.vars, untuk mengekstrak variabel dari rumus

all.vars( log10(y) ~ sin(log10(x)) + log(x1) )
# [1] "y"  "x"  "x1"
person A. Webb    schedule 02.03.2016
comment
Jika v adalah hasil dari all.vars(...) maka gunakan: formula(paste(v[1], "~", paste(v[-1], collapse = " + "))) - person G. Grothendieck; 02.03.2016
comment
@G.Grothendieck atau reformulate(v[1],v[-1]) (melakukan hal yang sama tapi menurut saya lebih jelas apa maksudnya) - person MrFlick; 02.03.2016
comment
Akankah all.vars kembali dalam urutan yang sama dengan rumus model? Jika demikian, solusi sempurna! Tidak percaya aku tidak memikirkannya! - person jslefche; 02.03.2016
comment
Anda juga dapat melihat lapply(attr(terms(f,keep.order=TRUE),'variables'),all.vars) - person A. Webb; 02.03.2016