分類: R

R 變數與工作空間

檢查與變更變數類別

在互動式的 R 操作環境之下,使用 class 函數可以立即檢查變數的類型,但是如果要在 R 的指令稿中確認變數的類型,class 函數就不是那麼方便使用了,此時可以改用 is 函數:

x <- 3
is(x, "numeric")
[1] TRUE

is 函數的第一個參數是要檢查的變數,而第二個參數則是類型名稱,它在檢查之後會傳回一個布林值(TRUEFALSE),這樣可以很方便的放在判斷式中使用,例如:

if(is(x, "class_name")) {
  # ...
}

大部分的變數類型都會有一個對應的 is.* 檢查函數,使用這類的函數會比一般性的 is 函數更有效率一些:

is.character("gtwang")
[1] TRUE

is.* 這類的函數有很多,我們可以使用下面這行指令列出所有 ls 開頭的指令:

ls(pattern = "^is", baseenv())
 [1] "is.array"                "is.atomic"               "is.call"                
 [4] "is.character"            "is.complex"              "is.data.frame"          
 [7] "is.double"               "is.element"              "is.environment"         
[10] "is.expression"           "is.factor"               "is.finite"              
[13] "is.function"             "is.infinite"             "is.integer"             
[16] "is.language"             "is.list"                 "is.loaded"              
[19] "is.logical"              "is.matrix"               "is.na"                  
[22] "is.na.data.frame"        "is.na.numeric_version"   "is.na.POSIXlt"          
[25] "is.na<-"                 "is.na<-.default"         "is.na<-.factor"         
[28] "is.na<-.numeric_version" "is.name"                 "is.nan"                 
[31] "is.null"                 "is.numeric"              "is.numeric_version"     
[34] "is.numeric.Date"         "is.numeric.difftime"     "is.numeric.POSIXt"      
[37] "is.object"               "is.ordered"              "is.package_version"     
[40] "is.pairlist"             "is.primitive"            "is.qr"                  
[43] "is.R"                    "is.raw"                  "is.recursive"           
[46] "is.single"               "is.symbol"               "is.table"               
[49] "is.unsorted"             "is.vector"               "isatty"                 
[52] "isBaseNamespace"         "isdebugged"              "isIncomplete"           
[55] "isNamespace"             "isNamespaceLoaded"       "isOpen"                 
[58] "isRestart"               "isS4"                    "isSeekable"             
[61] "isSymmetric"             "isSymmetric.matrix"      "isTRUE"

這裡我們是使用正規表示法(regular expression)列出 baseenv 這個基礎環境中所有 is 開頭的函數,這些細節在後面的教學中會陸續介紹。

數值變數的檢查函數常用的有 is.numericis.integeris.double 這三個,is.numeric 對於整數或是浮點數都會傳回 TRUE

is.numeric(1)
[1] TRUE
is.numeric(1L)
[1] TRUE

is.integer 只會對於整數傳回 TRUE

is.integer(1)
[1] FALSE
is.integer(1L)
[1] TRUE

is.double 則是對於浮點數傳回 TRUE

is.double(1)
[1] TRUE
is.double(1L)
[1] FALSE

變數轉型(Casting)

改變變數的類型稱為轉型(casting),在 R 中我們可以使用 as 來處理變數轉型的問題:

x <- "23.96"
as(x, "numeric")
[1] 23.96

而上述的各種 is.* 函數通常都會有對應的 as.* 函數,運用這類的函數會比一般的性的 as 更有效率:

as.numeric(x)
[1] 23.96

將數值向量轉換為 data frame:

y <- c(25, 53, 82, 33)
as.data.frame(y)
   y
1 25
2 53
3 82
4 33

另外還有一種改變變數類型的方式,就是直接指定變數的類別名稱:

x <- "23.96"
class(x) <- "numeric"
x
[1] 23.96
is.numeric(x)
[1] TRUE

Page: 1 2 3 4 5

G. T. Wang

個人使用 Linux 經驗長達十餘年,樂於分享各種自由軟體技術與實作文章。

Share
Published by
G. T. Wang

Recent Posts

[開箱] Marttiini MFT G10 芬蘭北歐直刀

本篇是 Marttiini M...

3 年 ago

[開箱] 一般打火棒、鎂塊打火棒

本篇是鎂塊打火棒與一般普通打火...

3 年 ago

[開箱] 瑞典 BAHCO 396-Lap 魚牌軍規摺疊鋸

本篇為瑞典 BAHCO 396...

3 年 ago

[DIY] 野炊水煮蛋、紅豆湯記錄

本篇記錄今年過年期間帶阿玄在家...

3 年 ago

[竹北素食] 善菓堂 SHAN GUO TANG

本篇是我最近去竹北善菓堂用餐時...

3 年 ago

Linux 複製檔案 cp 指令用法教學與範例

本篇介紹如何在 Linux 系...

3 年 ago