2014-01-18 15 views
1

我現在學習R和,使用R工作室在R中,你如何區分結果是矢量還是矩陣?

我寫道:

library(datasets) 
data(mtcars) 

## split() function divides the data in a vector. unsplit() function do the reverse. 
split(mtcars$mpg, mtcars$cyl) 

我回去:

$`4` 
[1] 22.8 24.4 22.8 32.4 30.4 33.9 21.5 27.3 26.0 30.4 21.4 

$`6` 
[1] 21.0 21.0 21.4 18.1 19.2 17.8 19.7 

$`8` 
[1] 18.7 14.3 16.4 17.3 15.2 10.4 10.4 14.7 15.5 15.2 13.3 19.2 15.8 15.0 

我知道,分裂返回向量。但是這是長度爲1的向量的向量嗎?

在R Studio中可見,矢量和矩陣顯示有什麼區別?

+3

這是一個列表,如文檔中所述:''split'返回的值是包含組值的 的向量列表。 ' – Dason

回答

1

這裏有一些方法,看看有什麼的split(calculations..)結果是:

class(split(mtcars$mpg, mtcars$cyl)) 
typeof(split(mtcars$mpg, mtcars$cyl)) 
mode(split(mtcars$mpg, mtcars$cyl)) 
storage.mode(split(mtcars$mpg, mtcars$cyl)) 

# str() Shows the structure of the object. It gives an small summary of it. 
str(split(mtcars$mpg, mtcars$cyl)) 

您也可以與列表assing的一個新對象,並使用以前的功能

cars_ls <- split(mtcars$mpg, mtcars$cyl) 

class(cars_ls) 
typeof(cars_ls) 
mode(cars_ls) 

# and 

str(cars_ls) 
# List of 3 
# $ 4: num [1:11] 22.8 24.4 22.8 32.4 30.4 33.9 21.5 27.3 26 30.4 ...0 
# $ 6: num [1:7] 21 21 21.4 18.1 19.2 17.8 19.7 
# $ 8: num [1:14] 18.7 14.3 16.4 17.3 15.2 10.4 10.4 14.7 15.5 15.2 ... 

詢問它到目前爲止,很明顯,對象拆分返回是一個列表。在這種情況下,列表cars_ls有3個數字向量。 您可以通過幾種方式爲列表建立索引。這裏有些例子。顯然,這裏沒有矩陣。

# Using $[backquote][list name][back quote] 
cars_ls$`4` 

# Including names using [ 
cars_ls[1] 

# No names using [[ 
cars_ls[[1]] 

編輯 從技術上講,列表是矢量也。這裏有一些更多的功能來檢查你有什麼類型的對象。

is.vector(cars_ls) 
# [1] TRUE 
is.matrix(cars_ls) 
# [1] FALSE 
is.list(cars_ls) 
# [1] TRUE 
is.data.frame(cars_ls) 
# [1] FALSE 

至於什麼不公開呢:

un_ls <- unlist(cars_ls) 

mode(un_ls) 
storage.mode(un_ls) 
typeof(un_ls) 
class(un_ls) 

is.vector(un_ls) 
# [1] TRUE 
is.list(un_ls) 
# [1] FALSE 

un_ls是一個數值向量,顯然不是一個列表。所以unlist()抓取一個列表並將其列出。

你可以找到這些功能在R Language Definition

1

更詳細的描述有多種is.功能的其中之一是

is.matrix 

您可以用模擬is.matrix:

is.it.a.matrix <- function(x) is.atomic(x) & length(dim(x)) == 2 

從一般數學角度和從is.vector結果向量的概念不完全在阿里gnment。看到這個earlier response regarding is.vector.無論如何,對我來說令人驚訝的列表是R技術術語中的'矢量'。請注意,具有dim屬性的data.frames由於不是原子級而被排除在該類別之外。