檢驗變數
這裡介紹一些在 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)
執行之後,會開啟這樣的視窗:
使用 View
所開啟的視窗只供使用者閱讀資料,無法直接修改,若要在上面直接修改資料,請改用 edit
:
xyz.df.new <- edit(xyz.df)
這樣在修改完之後,新的資料會儲存在 xyz.df.new
這個變數中,如果要直接修改原本的 xyz.df
,可以使用 fix
:
fix(xyz.df)
derek
你好,想问一下,因子变量那部分,sample计划是10000个,为什么下面写5000呢,很困惑,多谢
G. T. Wang
抱歉,這是我筆誤寫錯了,目前文章已經更正,謝謝您。
derek
太客气啦,还要感谢您的blog
Annie
你好, 我想請問
就是我再開view的時候中文的部分都會是亂碼
但使用fix的時候則不會,我是使用mac
請問這問題有解決辦法嗎?
路人
femail
有錯字
G. T. Wang
已修正,感謝告知。