2016-09-28 4 views
0

私は、同僚がループの使用をやめるようにポンプをかけていますが、適用機能もあまり良くありません。固定ループのlmでのforループの置換機能

私がする必要があるのは、複数の企業を固定参照値に対して回帰することです。これはforループで簡単に実現できますが、適用するファミリを使用することはそれほどありません。

マイデータとforループのように見える:

 Date AANRI AGLRI APARI ASTRI ASXRI DUERI ENVRI GASRI HDFRI SKIRI 
1: 2006-01-06 504.86 26443.30 255.75 101.15 28050.84 108.77 247.71 169.61 99.03 100.00 
2: 2006-01-13 498.86 26618.78 252.21 100.00 28324.59 110.70 251.43 171.67 99.18 103.36 
3: 2006-01-20 492.41 27734.33 255.67 100.38 28436.87 110.41 247.41 169.61 98.92 101.68 
4: 2006-01-27 498.86 28850.82 264.88 99.23 28815.26 111.90 246.70 173.74 98.26 99.16 
5: 2006-02-03 497.48 28164.16 265.79 100.38 28614.28 111.16 244.88 170.98 99.64 97.48 
6: 2006-02-10 500.71 28104.86 262.23 101.54 28567.93 112.21 248.63 173.05 99.38 98.32 

そして、私のforループ:これは正常に動作します

reg1_store <- list() 
for(i in names(RI_c)[!grepl("ASX|Date", names(RI_c))]){ 
    reg1_store[[i]] <- lm(get(i) ~ ASXRI, data = RI_c) 
} 

、私はASXに別会社を退行し、それに応じてそれらを格納することができています。

私はこれを適用機能でどのように再現できますか?

+0

こんにちは@ZheyuanLi、あなたの提案されたリンクは本当に有用であり、私はそれが後で助けになる可能性があると思います。しかし、この問題を提起した主な理由は、純粋にforループを適用関数に代入することが可能かどうかを確認することでした。 –

答えて

0

@ zhequan-liは非常に効率的なソリューションです。効率が考慮されておらず、結果をlistにしたい場合は、lapplyを使用してください。主な考え方はlapplyにテロップのベクトル(左側の企業)を与え、 "X〜ASXRI"という形式の文字列に各ティッカーを貼り付け、その式の上にlmを呼び出します。

tickers <- names(RI_c)[!grepl("ASX|Date", names(RI_c))] 
reg1_store <- lapply(tickers, function(x) { 
    lm(paste(x, "~ ASXRI"), RI_c) 
}) 

# To name the elements of your list 
names(reg1_store) <- tickers 
+0

@Weihuangウォン、ありがとう!ちょうど私が後だったもの。 私にはいくつか質問があります! 私は一般的に関数の表記に慣れていますが、この場合、 'function(x){lm(paste(x、"〜ASXRI ")、RI_c)'を書くと 'RI_c'が関数内でxの値を取る方法を決定する方法については混乱しています。第二に、私はそれぞれの列をループしたいと知っているのですか? –

+0

'lapply'は最初の(より正確には' X')引数の値を反復します。この場合、それはティッカーのベクトルです。各繰り返しで、 'lapply'はそのベクトルの1つの要素(1つのティッカー)を' function(x) 'に渡します。おそらく '?lapply'の例題を使って作業することは有益でしょう。 –

+0

@ ZheyuanLi:答えるかどうか考えました。私は、for-loopを 'lapply'に変換する方法よりも' 'lm'に関する質問が少ないと結論づけました(そして、それはおそらくSOに関する多くの質問の束縛です)。 OPの質問に直接答えを出すだけです。私はあなたのことを聞いています。私はあなたがいる間、そのリンクされた答えに感謝します。私は今日まで 'mlm'について知りませんでした。 –

関連する問題