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
R

6 留言

  1. derek

    你好,想问一下,因子变量那部分,sample计划是10000个,为什么下面写5000呢,很困惑,多谢

    • G. T. Wang

      抱歉,這是我筆誤寫錯了,目前文章已經更正,謝謝您。

      • derek

        太客气啦,还要感谢您的blog

  2. Annie

    你好, 我想請問
    就是我再開view的時候中文的部分都會是亂碼
    但使用fix的時候則不會,我是使用mac
    請問這問題有解決辦法嗎?

  3. 路人

    femail
    有錯字

    • G. T. Wang

      已修正,感謝告知。

Comments are Closed