R 變數與工作空間

檢驗變數

這裡介紹一些在 R 中常用的變數檢視方式。

print 函數

當我們在 R 的命令列輸入運算式或變數名稱時,R 會自動輸出計算的結果,這是因為 R 自動呼叫變數所對應的 print 方法所導致的,也就是說執行

3 * 2

跟執行

print(3 * 2)

所做的動作是一樣的。但如果是在函數或迴圈當中,R 就不會自動呼叫 print 來輸出結果:

prime <- c(2, 3, 5, 7, 11, 13)
for (x in prime) {
  x
}

如果我們需要在函數獲迴圈中輸出變數的值,就要明確呼叫 print 函數:

for (x in prime) {
  print(x)
}
[1] 2
[1] 3
[1] 5
[1] 7
[1] 11
[1] 13
print 函數的內部會呼叫 cat 這個低階函數來輸出資料,cat 函數通常只有在開發各種 print 函數時會使用,一般的狀況下我們不會直接呼叫它。

summary 函數

除了直接輸出變數內容之外,我們也可以使用 summary 函數來檢視變數的基本統計量,幫助我們快速了解資料的分佈狀況,對於數值類的資料 summary 會計算平均值(mean)、中位數(median)、還有各個分位數(quantiles):

x <- rnorm(30)
summary(x)
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
-3.27700 -0.45780  0.02265  0.07430  0.92850  1.94900

這裡我們呼叫 rnorm 產生 30 筆標準常態分佈的資料,並使用 summary 來檢視資料的概況。

若遇到類別型的因子變數,summary 會計算每個值出現的次數:

y <- sample(c("A", "B", "C"), 30, replace = TRUE)
y.factor <- factor(y)
summary(y.factor)
 A  B  C 
 9  7 14

這裡的我們使用 sample 函數對 c("A", "B", "C") 進行重複取樣,取出的樣本再轉換為因子變數,最後呼叫 summary 輸出每個字母出現的總數。

布林值的變數也是跟因子變數類似,同樣會輸出每個值出現的次數:

z <- sample(c(TRUE, FALSE, NA), 30, replace = TRUE)
summary(z)
   Mode   FALSE    TRUE    NA's 
logical      14       5      11

對於多維度的資料,summary 會對每個欄位的資料分別計算基本統計量,這裡我們使用上面建立好的三個變數組成一個 data frame:

xyz.df <- data.frame(x, y, z)

我們可以使用 head 查看 data frame 開頭的幾列資料,稍微瞭解一下原始資料的形式:

head(xyz.df)
            x y     z
1  0.80229870 C FALSE
2  0.97031534 C  TRUE
3  0.97657093 A FALSE
4  1.26690080 C FALSE
5  0.41189886 A  TRUE
6 -0.01411904 B    NA

接著呼叫 summary

summary(xyz.df)
       x            y          z          
 Min.   :-3.27717   A: 9   Mode :logical  
 1st Qu.:-0.45777   B: 7   FALSE:14       
 Median : 0.02265   C:14   TRUE :5        
 Mean   : 0.07430          NA's :11       
 3rd Qu.: 0.92848                         
 Max.   : 1.94892

str 函數

str 是一個用來檢視變數資料結構的函數,他會顯示變數的類型以及開頭的幾個值:

str(x)
 num [1:30] 0.802 0.97 0.977 1.267 0.412 ...

str 特別適合用於檢視像 data frame 這類較複雜的變數:

str(xyz.df)
'data.frame':	30 obs. of  3 variables:
 $ x: num  0.802 0.97 0.977 1.267 0.412 ...
 $ y: Factor w/ 3 levels "A","B","C": 3 3 1 3 1 2 2 1 3 1 ...
 $ z: logi  FALSE TRUE FALSE FALSE TRUE NA ...

變數內部結構

我們之前提過每一種變數都有對應的 print 函數,變數的內容會透過這些 print 函數的控制,進而將資料以適當(易讀)的方式輸出,有時候 print 會忽略一些變數內部的結構,只輸出資料本身的資訊,讓使用者更容易清楚地閱讀。

如果我們想要查看變數內部原始的資料結構,可以使用 unclass 函數將變數的類別屬性移除,使變數在輸出時跳過 print 函數的解析步驟,直接以原始的形式輸出:

unclass(y.factor)
 [1] 3 3 1 3 1 2 2 1 3 1 2 1 2 1 3 3 1 3 2 2 3 3 3 2 3 3 1 3 3 1
attr(,"levels")
[1] "A" "B" "C"

另外 attributes 函數也可以用來顯示變數的屬性:

attributes(y.factor)
$levels
[1] "A" "B" "C"

$class
[1] "factor"

圖形介面工具

在 R 中如果要檢視二為的資料矩陣或 data frame,可以使用 View 這個工具(請注意 V 是大寫),它可以使用類似 Excel 試算表的方式呈現二維的資料:

View(xyz.df)

執行之後,會開啟這樣的視窗:

r-variables-and-workspace-view-1

使用 View 所開啟的視窗只供使用者閱讀資料,無法直接修改,若要在上面直接修改資料,請改用 edit

xyz.df.new <- edit(xyz.df)

r-variables-and-workspace-edit-1

這樣在修改完之後,新的資料會儲存在 xyz.df.new 這個變數中,如果要直接修改原本的 xyz.df,可以使用 fix

fix(xyz.df)
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