2016-08-09 15 views
0

に出力します。x = c(1, 2, 3)をベクトルとします。私は、で評価されたBスプラインの行列を生成するために、Rsplinesパッケージのbs関数を使用します。bs(bスプライン)関数の出力行列をR

require(splines) 
x <- c(1, 2, 3) 
bs.x <- bs(x, knots = c(1.5, 2.5)) 

次のように出力bs.xは、明らかに

   1   2   3   4 5 
[1,] 0.00000000 0.0000000 0.0000000 0.00000000 0 
[2,] 0.05555556 0.4444444 0.4444444 0.05555556 0 
[3,] 0.00000000 0.0000000 0.0000000 0.00000000 1 
attr(,"degree") 
[1] 3 
attr(,"knots") 
[1] 1.5 2.5 
attr(,"Boundary.knots") 
[1] 1 3 
attr(,"intercept") 
[1] FALSE 
attr(,"class") 
[1] "bs"  "basis" "matrix" 

で、基底行列のほか、bs.xは、他の属性を有しています。 私の質問は、これらの属性を取り除く方法です。私は最終的にMatrix(bs.x)を実行する必要があるので、これを行う必要があります。これにより、次のエラーメッセージが表示されます。

Error in as(x, "matrix") : 
internal problem in as(): “bs” is(object, "matrix") is 
TRUE, but the metadata asserts that the 'is' relation is FALSE 

私はmatrixbs.xが所属するクラスの1つですので、これはあると思います。この瞬間、私は次のようなダンのことをします。

bs.x <- matrix(as.numeric(bs.x), nr = nrow(bs.x)) 

もっと良い選択肢はありますか?前もって感謝します。

+0

あなたは、暗くなりを保存するすべての属性を削除し、暗くなるを再割り当てすることができます。それはかなり効率的で、コピーを避けるべきです。 'dims < - dim(bs.x);のようなものです。属性(bs.x)< - NULL; dim(bs.x)< - dims' –

答えて

1

全体かなり良くはないが、

attributes(bs.x) <- attributes(bs.x)["dim"] 

が動作しているようです。 (のみdim属性であることをbs.xの属性を再割り当てします。)

関連する問題