以下是我的大数据文件的前几行:
Symbol|Security Name|Market Category|Test Issue|Financial Status|Round Lot Size
AAC|Australia Acquisition Corp. - Ordinary Shares|S|N|D|100
AACC|Asset Acceptance Capital Corp. - Common Stock|Q|N|N|100
AACOU|Australia Acquisition Corp. - Unit|S|N|N|100
AACOW|Australia Acquisition Corp. - Warrant|S|N|N|100
AAIT|iShares MSCI All Country Asia Information Technology Index Fund|G|N|N|100
AAME|Atlantic American Corporation - Common Stock|G|N|N|100
Run Code Online (Sandbox Code Playgroud)
我读了以下数据:
data <- read.table("nasdaqlisted.txt", sep="|", quote='', header=TRUE, as.is=TRUE)
Run Code Online (Sandbox Code Playgroud)
并构造一个数组和一个矩阵:
d1 <- array(data, dim=c(nrow(data), ncol(data)))
d2 <- matrix(data, nrow=nrow(data), ncol=ncol(data))
Run Code Online (Sandbox Code Playgroud)
然而,即使d1是一个数组,d2是一个矩阵,所述class和mode是相同的:
> class(d1)
[1] "matrix"
> mode(d1)
[1] "list"
> class(d2)
[1] "matrix"
> mode(d2)
[1] "list"
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
我会咬一口,然后去解释我对这些问题的理解.
您不需要大型测试文件来演示此问题.一个简单的data.frame做法:
test <- data.frame(var1=1:2,var2=letters[1:2])
> test
var1 var2
1 1 a
2 2 b
Run Code Online (Sandbox Code Playgroud)
请记住,a data.frame只是list内部的.
> is.data.frame(test)
[1] TRUE
> is.list(test)
[1] TRUE
Run Code Online (Sandbox Code Playgroud)
list像你期望的那样具有类似结构.
> str(test)
'data.frame': 2 obs. of 2 variables:
$ var1: int 1 2
$ var2: Factor w/ 2 levels "a","b": 1 2
> str(as.list(test))
List of 2
$ var1: int [1:2] 1 2
$ var2: Factor w/ 2 levels "a","b": 1 2
Run Code Online (Sandbox Code Playgroud)
当您matrix针对a data.frame或a 指定调用时list,最终会得到一个填充了data.frame或list元素的矩阵.
result1 <- matrix(test)
> result1
[,1]
[1,] Integer,2
[2,] factor,2
Run Code Online (Sandbox Code Playgroud)
看看结构result1,你可以看到它仍然是一个list,但现在只是尺寸(见下面输出的最后一行).
> str(result1)
List of 2
$ : int [1:2] 1 2
$ : Factor w/ 2 levels "a","b": 1 2
- attr(*, "dim")= int [1:2] 2 1
Run Code Online (Sandbox Code Playgroud)
这意味着它现在既是a matrix又是alist
> is.matrix(result1)
[1] TRUE
> is.list(result1)
[1] TRUE
Run Code Online (Sandbox Code Playgroud)
如果从此对象中剥离尺寸,它将不再是a matrix并且将恢复为仅仅是a list.
dim(result1) <- NULL
> result1
[[1]]
[1] 1 2
[[2]]
[1] a b
Levels: a b
> is.matrix(result1)
[1] FALSE
> is.list(result1)
[1] TRUE
> str(result1)
List of 2
$ : int [1:2] 1 2
$ : Factor w/ 2 levels "a","b": 1 2
Run Code Online (Sandbox Code Playgroud)