2017-07-12 8 views
0

lapplyを使用していくつかの回帰を実行しようとしています。私はifelse条件を使用して、どの回帰を実行するかを区別したいと考えています。しかし、ifelseを使用すると、出力はlmオブジェクトではありません。私は自分の問題を再現するためのコードを付けています。助けてください。ifelse条件付きlapply内でのlm()の使用

attach(iris) 

names.list = c('a','b','c') 

models.work = lapply(names.list, 
        function(f) 
         { 
         lm(Sepal.Length~Sepal.Width,data=iris) 
        }) 

models.not.work = lapply(names.list, 
        function(f) 
        { 
         ifelse(1==1, 
         lm(Sepal.Length~Sepal.Width,data=iris), 
         lm(Sepal.Length~Sepal.Width,data=iris) 
        ) 
        }) 

答えて

0

ifelseは、この場合にはモデルオブジェクトを返すことができません。通常のif - else節を使用してください。

(寸法および "クラス" を含む)は、同じ長さと属性のベクトルをテストtestが入力され

とおり

attach(iris) 

names.list = c('a','b','c') 
models.not.work = lapply(names.list, 
         function(f) 
         { 
          if(1==1){ 
            lm(Sepal.Length~Sepal.Width,data=iris)}else{ 
            lm(Sepal.Length~Sepal.Width,data=iris) 
            } 

         }) 


#output 

> models.not.work[[1]] 

Call: 
lm(formula = Sepal.Length ~ Sepal.Width, data = iris) 

Coefficients: 
(Intercept) Sepal.Width 
    6.5262  -0.2234 
+0

これは私の手元にある問題と最も関連があるため、受け入れられました。 – Varun

2

ifelseは、それが返さ言います。あなたの入力は、入力長さが1であるです(TRUEを使用することができます)。したがって、ifelseは長さ1の何かを返します。lmは、リストから最初の要素のみを返すようにリストを返します。これは、係数となることがあります。

ifelseここで使用したいものではありません。実際に何をしようとしているのかははっきりしませんが、実際の目標を達成するためのより良い方法があります。

手動で要素を手動で循環させる場合は、通常のif文を使用します。実際に何をしようとしているのかを説明すれば、おそらくもっと良い方法があります。

関連する問題