2017-05-26 23 views
1
a<-c(AA=4.7,BB=2,CC=7.5) 
typeof(a) #double 

什麼是對象「a」?這是一個數字矢量,字符串矢量或列表?奇怪的對象 - 矢量還是列表?

class(a) 

您使用的是創建一個向量,則代碼class(a)應該說,一個是向量代碼:

+1

命名爲載體...嘗試'名(一)'和'unname(一)'。也可以嘗試'setNames(1:5,信件[1:5])'' – Sotos

+0

> is.vector(一) [1] TRUE' –

+0

是由於這的確是一個載體,但爲什麼它是數字載體? – mokebe

回答

1

基本上找對象的方式,你有一個名爲向量這仍然是一個數值向量。您不希望數據框的列成爲字符,因爲它的名稱是字符串。這裏同樣發生。

變得清晰起來,只要嘗試

names(a) 
unname(a) 
0

你可以檢查。

+0

好的,但爲什麼這個向量是數字? – mokebe

+0

@mokebe是載體是數字,但已分配一個名稱載體 –

1

您可以使用以下功能檢查課程,模式,類型等。你的情況:

class(a) 
[1] "numeric" 

mode(a) 
[1] "numeric" 

typeof(a) 
[1] "double" 

is.atomic(a) 
[1] TRUE 

is.list(a) 
[1] FALSE 

從官方[R幫助頁面:

它是R有兩個名字爲它的浮點 載體,雙和數字(和以前有真正的歷史異常)。

double是類型的名稱。 numeric是隱式類的模式名稱和 。

有關更多信息,請在控制檯中鍵入help("double")

+1

的元素'is.vector'沒什麼用處,因爲在這裏列出也是一個載體。如果你需要更嚴格意義上的矢量,你應該(也)用'is.atomic'進行測試。但是,如果您驗證輸入,通常您仍然需要特定的課程... – Roland

+0

根據您的反饋@Roland更新。 – jsb

1

我想你很困惑atomic vector/vectorlists。我認爲@nicola正確地指出了評論中的矢量。在我們說矢量時,它實際上意味着它是一個原子矢量還是一個列表。您可以通過檢查它們的3個屬性來確定它們,即類型,長度和屬性。

因此,要檢查對象是否是向量,您必須選中以下內容:is.atomic(x) || is.list(x)。關閉當然你的情況是真的。這表明它是一個原子類型的向量。

除此之外,原子向量進一步主要分離爲整數,邏輯,雙精度(數字)和字符。

當你要確定具體的類型,如整數,邏輯等

使用typeof()

現在有兩個,你可以檢查哪些是classmode其他的東西。

class()用於識別內容「中輸入」的對象是從視圖面向對象編程的時候,你會在type倍超發現class。比如在你的情況下,「a」基本上是類數字下的「double」類型對象。

mode()從作者的角度給出了對象的「類型」。

現在回答你的問題:

對象「a」是在類數字double類型的。您可以通過在控制檯上運行typeof(a)和class(a)來檢查。

有一個在r和從?storage.mode文件名爲storage.mode另一件事:

兩個模式和storage.mode返回一個字符串給對象的 (存儲)模式 - 往往是相同的 - 無論是依託 輸出的typeof(X)的

請閱讀「高級R」從哈德利韋翰,大部分我學到的東西是僅從這本書。鏈接是here。您可能還想尋找R Language Definition

注意:我希望我有什麼,我要傳達清楚。如果有人在我的理解中發現任何錯誤,請告訴我。但要盡我的理解,我幾乎可以肯定,這是對R.