2015-10-16 11 views
-1

Я новичок в отношении R, но после того, как бороться с этой проблемой в течение некоторого времени, я ищу помощи:R - подмножества матрицы дает неправильный размер

У меня есть матрица:

> is.matrix(Ls) 
[1] TRUE 

> Ls 
     Start  Duration 
     newrow_fin "1014507296" "133.313" 
     newrow_fin "1014657293" "449.975" 
     newrow_fin "1015523823" "566.614" 
     newrow_fin "1017473690" "233.236" 

И я хотел бы подмножество этой матрицы в 3-х другие матрицы:

> int2_start 
[1] 1014174109 
> int3_start 
[1] 1016639945 
Ls1<-subset.matrix(Ls, (Ls[,1])<=int2_start) [,c(1,2)] 
Ls2<-subset.matrix(Ls, (Ls[,1])>int2_start) [,c(1,2)] 
Ls2<-subset.matrix(Ls2, (Ls2[,1])<=int3_start) [,c(1,2)] 
Ls3<-subset.matrix(Ls, (Ls[,1])>int3_start) [,c(1,2)] 

Он отлично работает для LS1 & LS2. Но Ls3 меняет формат.

> Ls1 
Start Duration 
> Ls2 
     Start  Duration 
     newrow_fin "1014507296" "133.313" 
     newrow_fin "1014657293" "449.975" 
     newrow_fin "1015523823" "566.614" 
> Ls3 
    Start  Duration 
     "1017473690" "233.236" 
> is(Ls1) 
[1] "matrix" "array"  "structure" "vector" 
> is(Ls2) 
[1] "matrix" "array"  "structure" "vector" 
> is(Ls3) 
[1] "character"   "vector"    "data.frameRowLabels" "SuperClassMethod" 

Я не понимаю.

+2

У вас есть числовое значение в вашей матрице. Только персонажи. –

+0

Если я сменю код на Ls2 <-subset.matrix (Ls, as.numeric (Ls [, 1])> int2_start) [, c (1,2)]. Такая же проблема – sugarinthemoustache

+1

Это должно быть что-то вроде 'LS <- as.numeric (LS)' –

ответ

0

По умолчанию [ выборы попытаются упростить результат, уменьшив размер с длиной 1. Добавьте drop = FALSE, если вы этого не хотите.

test <- array(1, dim = rep(2, 3)) 
dim(test) # 3 dimensions 
dim(test[1, ,]) # 2 dimensions 
dim(test[1, 1,]) # 1 dimension 
dim(test[1, , , drop = FALSE]) # 3 dimensions 
dim(test[1, 1, , drop = FALSE]) # 3 dimensions