1

関数 lm(...) は、クラス 'lm' のオブジェクトを返します。このようなオブジェクトの配列を作成するにはどうすればよいですか? 私は次のことをしたい:

my_lm_array <- rep(as.lm(NULL), 20)
#### next, populate this array by running lm() repeatedly:
for(i in 1:20) {
   my_lm_array[i] <- lm(my_data$results ~ my_data[i,])
}

明らかに、「my_lm <- rep(as.lm(NULL), 20)」という行は機能しません。タイプ「lm」のオブジェクトの配列を作成しようとしています。それ、どうやったら出来るの?

4

2 に答える 2

2

それがあなたの質問に答えるかどうかはわかりませんがlm、データフレームの異なる列に対して一連の変数を実行したい場合は、次のようなことができます:

data <- data.frame(result=rnorm(10), v1=rnorm(10), v2=rnorm(10))
my_lms <- lapply(data[,c("v1","v2")], function(v) {
  lm(data$result ~ v)
})

次に、my_lms class の要素のリストになりますlm

于 2013-02-13T20:33:53.953 に答える
1

さて、次のように空の/無意味なオブジェクトの配列を作成できます:lm

z <- NA
class(z) <- "lm"
lm_array <- replicate(20,z,simplify=FALSE)

しかし、それはおそらく問題を解決する最良の方法ではありません。適切な長さの空のリスト ( ) を作成し、それに沿って要素を埋めることができます。R は型付けが弱いため、値をオブジェクトvector("list",20)に置き換えてもかまいません。ただし、より慣用的には、予測子名のリストで実行できます。NULLlmlapply

my_data <- data.frame(result=rnorm(10), v1=rnorm(10), v2=rnorm(10))
prednames <- setdiff(names(my_data),"result")  ## extract predictor names
lapply(prednames,
 function(n) lm(reformulate(n,response="result"),
                 data=my_data))

または、無名関数を作成したくない場合は、最初に数式のリストを生成し ( を使用lapply)、lmそれらに対して実行できます。

formList <- lapply(prednames,reformulate,response="result") ## create formulae
lapply(formList,lm,data=my_data)  ## run lm() on each formula in turn

lm上記の最初の戦略と同じオブジェクトのリストを作成します。

my_data$result一般に、モデリング式内などの構文を使用しないことをお勧めします。data代わりに、モデル内のすべての変数がオブジェクト内から描画されるように設定してみてください。そうすれば、メソッドが好きpredictになり、update正しく機能する可能性が高くなります...

于 2013-02-13T20:36:19.643 に答える