2016-04-30 19 views
0

私が適用関数を使用するときはいつでも、無名関数でダミー変数を使用すると、そのダミー変数の名前が内部的に使用されます。結果のリストを処理する際に複雑さを避けるために、元の変数名を内部的にどのように使用できますか?Rで適用関数を使用するときに関数内で元の引数名を使用するにはどうすればよいですか?

set.seed(314) 

df <- data.frame(response = rnorm(500), 
       Col1 = rnorm(500), 
       Col2 = rnorm(500), 
       Col3 = rnorm(500), 
       Col4 = rnorm(500)) 

> apply(df[, 2:5], 2, function(x) lm(response ~ x, data = df)) 
$Col1 

Call: 
lm(formula = response ~ x, data = df) 

Coefficients: 
(Intercept)   x 
    0.074452  0.007713 


$Col2 

Call: 
lm(formula = response ~ x, data = df) 

Coefficients: 
(Intercept)   x 
    0.06889  0.07663 


$Col3 

Call: 
lm(formula = response ~ x, data = df) 

Coefficients: 
(Intercept)   x 
    0.07401  0.03512 


$Col4 

Call: 
lm(formula = response ~ x, data = df) 

Coefficients: 
(Intercept)   x 
    0.073668 -0.001059 

は、私は上記の各線形回帰は、一つ一つの回帰に名前Col1Col2などの代わりに、xを使用したい:

以下は、私が何を意味するか記述した例です。さらに、私は、適用関数を使用するときに、(線形回帰だけでなく)どのような状況でも元の名前を使用する一般的な方法を探しています。あなたは) 2をやっ係数名と出力結果として得られる、式

l <- lapply(df[, 2:5], function(x) lm(response ~ x, data = df)) 
for (i in 1:length(l)) { 
    names(l[[i]]$coefficients)[2] <- names(l)[i] 
    l[[i]]$call <- gsub('x', names(l)[i], l[[i]]$call) 
} 

を交換しているよう

1)まず回帰を実行します。次のように

答えて

0

一つのアプローチは、2つのステップでそれを行うことです以下の通りである。

$Col1 

Call: 
c("lm", "response ~ Col1", "df") 

Coefficients: 
(Intercept)   Col1 
    -0.04266  -0.07508 


$Col2 

Call: 
c("lm", "response ~ Col2", "df") 

Coefficients: 
(Intercept)   Col2 
    -0.04329  0.02403 


$Col3 

Call: 
c("lm", "response ~ Col3", "df") 

Coefficients: 
(Intercept)   Col3 
    -0.04519  -0.03300 


$Col4 

Call: 
c("lm", "response ~ Col4", "df") 

Coefficients: 
(Intercept)   Col4 
    -0.04230  -0.04506 
+0

おかげで、それはまだあまりにも....あなただけのグラムする必要があることを修正するための答えを編集した代わりに、などのCol1、Col2に、 –

+0

の式通話中のxを持っていますrabを 'call'フィールドに置き換えて修正します。 – Gopala

+0

ありがとうございます。しかし、あらゆる状況で自動的に行う方法はありますか?私が手動でxを変数に置き換えるのではなく、私が働いているものに関係なく自動的に実行したいのです。私の質問は、これを一般的に行う方法でした。線形回帰でそれを行う方法だけではありません。 –

関連する問題