2016-08-09 4 views
0

Lassen Sie x = c(1, 2, 3) ein Vektor sein. Ich verwende bs Funktion im splines Paket von R, um eine Matrix von B Splines zu erzeugen, die bei x ausgewertet werden.extrahieren Matrix von BS (b Spline) -Funktion ausgegeben in R

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

Der Ausgang bs.x wie folgt ist

   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" 

klar, neben der Basismatrix hat bs.x andere Attribute. Meine Frage ist, wie man diese Attribute los wird. Ich muss dies tun, denn letztendlich muss ich Matrix(bs.x) ausführen, was mir die folgende Fehlermeldung wirft.

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 

Ich denke, das liegt daran, dass matrix einer der Klassen, die bs.x gehört. In diesem Moment mache ich das folgende dumme Ding.

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

Gibt es eine bessere Alternative? Danke im Voraus.

+0

Sie könnten die dims speichern, entfernen Sie alle Attribute und dann die dims neu zuweisen. Das sollte ziemlich effizient sein und Kopien vermeiden. Etwas wie 'Dims <- dim (bs.x); Attribute (bs.x) <- NULL; dim (bs.x) <- dims –

Antwort

1

Nicht viel besser, aber

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

scheint zu funktionieren. (Ordnet die Attribute von bs.xnur das dim Attribut zu sein.)