對於家庭作業任務,我編寫了一個執行前向逐步迴歸的函數。它需要3個參數:因變量,潛在的獨立變量列表以及發現這些變量的數據框。目前,除數據框外,我的所有輸入(包括自變量列表)都是字符串。如何使用變量名作爲參數
許多內置函數以及高性能包中的函數都允許輸入非字符串的變量。哪種方式是最佳做法,爲什麼?如果非字符串是最佳實踐,我怎麼能實現這一點考慮到其中一個參數是列表變量在數據框中,而不是一個變量?
對於家庭作業任務,我編寫了一個執行前向逐步迴歸的函數。它需要3個參數:因變量,潛在的獨立變量列表以及發現這些變量的數據框。目前,除數據框外,我的所有輸入(包括自變量列表)都是字符串。如何使用變量名作爲參數
許多內置函數以及高性能包中的函數都允許輸入非字符串的變量。哪種方式是最佳做法,爲什麼?如果非字符串是最佳實踐,我怎麼能實現這一點考慮到其中一個參數是列表變量在數據框中,而不是一個變量?
就我個人而言,如果使用字符串完成您所需的任何操作,我都不會看到任何問題。如果你願意,你可以重寫你的函數,將公式作爲輸入而不是字符串來指定獨立變量和因變量。在這種情況下,你的函數調用是這樣的:
fitmodel(x ~ y + z,data)
,而不是這樣的:
fitmodel("x",list("y","z"),data)
使用公式將允許你指定變量簡單的代數組合,你的迴歸使用,像x ~ y + log(z)
。如果你走這條路線,那麼你可以通過調用model.frame
來建立公式指定的數據幀,然後使用這個新的數據幀來運行你的算法。例如:
> df<-data.frame(x=1:10,y=10:1,z=sqrt(1:10))
> model.frame(x ~ y + z,df)
x y z
1 1 10 1.000000
2 2 9 1.414214
3 3 8 1.732051
4 4 7 2.000000
5 5 6 2.236068
6 6 5 2.449490
7 7 4 2.645751
8 8 3 2.828427
9 9 2 3.000000
10 10 1 3.162278
> model.frame(x ~ y + z + I(x^2) + log(z) + I(x*y),df)
x y z I(x^2) log(z) I(x * y)
1 1 10 1.000000 1 0.0000000 10
2 2 9 1.414214 4 0.3465736 18
3 3 8 1.732051 9 0.5493061 24
4 4 7 2.000000 16 0.6931472 28
5 5 6 2.236068 25 0.8047190 30
6 6 5 2.449490 36 0.8958797 30
7 7 4 2.645751 49 0.9729551 28
8 8 3 2.828427 64 1.0397208 24
9 9 2 3.000000 81 1.0986123 18
10 10 1 3.162278 100 1.1512925 10
>
好的想法。你有很好的參考嗎? – PascalVKooten
來自cran的文檔在這裏:http://cran.r-project.org/web/packages/Formula/Formula.pdf http://cran.r-project.org/web/packages/Formula/vignettes/Formula .PDF – mrip
哈德利寫了這個偉大的一塊作爲部分對高級編程(?一本即將出版)書中的R - 看看:http://adv-r.had.co.nz/Computing -on-the-language.html –
而不是將其中一個參數作爲變量列表,我建議使用'...'傳遞任意數量的變量或公式,如果您需要傳遞多個*列表*變量。檢查此:http://stackoverflow.com/questions/18813116/creating-a-formula-syntax-in-r-for-package/18816206#18816206 –