ตัดการแปลงออกจากสูตร

ฉันมีสูตรโมเดลที่มีการแปลง ซึ่งบางสูตรสามารถซ้อนกันได้ ฉันต้องการตัดการแปลงทั้งหมดออกจากสูตร เหลือเพียงตัวแปรดิบ

E.g.,

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

จะกลายเป็น:

y ~ x + x1

ฉันคิดว่าสิ่งนี้สามารถทำได้ด้วยนิพจน์ทั่วไป แต่ฉันต้องการทราบว่ามีฟังก์ชันที่มีอยู่แล้วหรือไม่ หรือชื่อตัวแปรดิบถูกเก็บไว้ที่ไหนสักแห่ง (เช่น terms) ซึ่งสามารถสร้างสูตรใหม่ได้ ถ้าไม่เช่นนั้น บางทีอาจมีคนสามารถช่วย regex ในกรณีที่มีการซ้อน...?

ขออภัย ไม่ใช่ตัวเลือกในการแปลงตัวแปรภายนอกสูตร

ชื่นชมมาก


person jslefche    schedule 02.03.2016    source แหล่งที่มา


คำตอบ (1)


มีฟังก์ชัน all.vars สำหรับแยกตัวแปรออกจากสูตร

all.vars( log10(y) ~ sin(log10(x)) + log(x1) )
# [1] "y"  "x"  "x1"
person A. Webb    schedule 02.03.2016
comment
ถ้า v เป็นผลลัพธ์ของ all.vars(...) ให้ใช้: formula(paste(v[1], "~", paste(v[-1], collapse = " + "))) - person G. Grothendieck; 02.03.2016
comment
@G.Grothendieck หรือ reformulate(v[1],v[-1]) (ทำสิ่งเดียวกัน แต่ฉันคิดว่ามันชัดเจนกว่าว่าเจตนาคืออะไร) - person MrFlick; 02.03.2016
comment
all.vars จะกลับมาในลำดับเดียวกันกับสูตรโมเดลหรือไม่ ถ้าเป็นเช่นนั้น ก็เป็นทางออกที่สมบูรณ์แบบ! ไม่น่าเชื่อว่าไม่ได้คิด! - person jslefche; 02.03.2016
comment
คุณสามารถดู lapply(attr(terms(f,keep.order=TRUE),'variables'),all.vars) ได้ด้วย - person A. Webb; 02.03.2016