R:为什么这个矩阵不是数字而其中的所有内容都是数字?

时间:2014-12-17 06:19:27

标签: r matrix

我遇到了一个奇怪的问题。看看这个矩阵:

 theta2
      [,1]       [,2]       [,3]       
 [1,] 0.1024147  0.0111102  -0.08898407
 [2,] -0.2182463 0.02381744 0.1164061  
 [3,] -2.160951  -0.1846134 -0.2051436 
 [4,] -1.915053  -0.2106328 -0.2388602 
 [5,] -1.989786  -0.2017471 -0.2244937 
 [6,] -2.013182  -0.1923669 -0.2284833 
 [7,] -2.184123  -0.174379  -0.209156  
 [8,] -2.052668  -0.1971675 -0.2291237 
 [9,] -2.108423  -0.1987345 -0.2421515 
[10,] -2.066361  -0.2162237 -0.2430083

一切都是数字。我们看看它的课程:

     class(theta2)
[1] "matrix"

没问题,它是一个矩阵。我们看看它的结构:

str(theta2)
List of 30
 $ : num 0.102
 $ : num -0.218
 $ : num -2.16
 $ : num -1.92
 $ : num -1.99
 $ : num -2.01
 $ : num -2.18
 $ : num -2.05
 $ : num -2.11
 $ : num -2.07
 $ : num 0.0111
 $ : num 0.0238
 $ : num -0.185
 $ : num -0.211
 $ : num -0.202
 $ : num -0.192
 $ : num -0.174
 $ : num -0.197
 $ : num -0.199
 $ : num -0.216
 $ : num -0.089
 $ : num 0.116
 $ : num -0.205
 $ : num -0.239
 $ : num -0.224
 $ : num -0.228
 $ : num -0.209
 $ : num -0.229
 $ : num -0.242
 $ : num -0.243
 - attr(*, "dim")= int [1:2] 10 3

有点奇怪,为什么它是" 30"? 更奇怪的是,当我检查它是否为数字时:

is.numeric(theta2)
[1] FALSE

有人能解释一下这里发生了什么吗?我不是新手,但我完全迷路了!

1 个答案:

答案 0 :(得分:2)

也许,您从list

创建了一个矩阵
set.seed(25)
theta2 <- as.list(rnorm(30))

dim(theta2) <- c(10,3)
class(theta2)
#[1] "matrix"

str(theta2, list.len=3)
# List of 30
#$ : num -0.212
#$ : num -1.04
#$ : num -1.15
#[list output truncated]
# - attr(*, "dim")= int [1:2] 10 3

is.numeric(theta2)
#[1] FALSE

由于它是list,您可以使用is.numeric检查lapply/sapply

 sapply(theta2, is.numeric)

您可unlist theta2并创建具有适当尺寸的matrix

theta2N <- unlist(theta2)
dim(theta2N) <- c(10,3)
is.matrix(theta2N)
#[1] TRUE
is.numeric(theta2N)
#[1] TRUE