R 變數與資料的管理

R 函數的 data 參數

在 R 中有許多函數都可以透過 data 參數來指定 data frame,例如線性回歸的 lm

M1 <- lm(GSI ~ factor(Location) + factor(Year), data = Squid)

第一個參數是指定線性回歸的模型,我們在這裡尚不討論這個部分,而第二個參數就是以 data 參數指定 data frame 為 Squid,告知 R 迴歸模型中的變數是存在於這個 data frame 中。這種方式可以讓所有的資料都放在一個 data frame 中,除了方便管理之外,在資料變數很多的時候,也可以避免變數名稱互相衝突。

不過不是每一個常見的函數都支援 data 參數,例如 mean 就不支援:

mean(GSI, data = Squid)

這樣執行之後,就會產生錯誤:

Error in mean(GSI, data = Squid) : 找不到物件 'GSI'

通常我們可以查詢函數的線上手冊(help),來確認該函數使否有支援 data 參數,有些函數甚至在某些用法有支援,有些則沒有,例如 boxplot 就是這樣:

boxplot(GSI ~ factor(Location), data = Squid)

上面這行指令可以正常執行,不過換另外一種寫法,就會有問題:

boxplot(GSI, data = Squid)

執行這行指令會出現這樣的錯誤訊息:

Error in boxplot(GSI, data = Squid) : 找不到物件 'GSI'

基本上在函數有支援 data 參數的狀況下,使用 data 參數是最好的選擇,這樣可以讓命名空間比較乾淨一些。

錢字號($

對於沒有支援 data 參數的函數,可以改用錢字號($)的方式來取用 data frame 的變數:

Squid$GSI

輸出為

   [1] 10.4432  9.8331  9.7356  9.3107  8.9926
   [6]  8.7707  8.2576  7.4045  7.2156  6.8372
  [11]  6.3882  6.3672  6.2998  6.0726  5.8395
[略]

在錢字號與變數名稱之間可以允許空白:

Squid $ GSI

但是習慣上不建議這樣寫,這樣看起來很奇怪。

另外也可以用指定欄位編號的方式來存取 data frame 中的變數,例如要取得 Squid 的第 6 欄:

Squid[, 6]

在實際使用時,不管哪一種方式都可以:

mean(Squid$GSI)
mean(Squid[, 6])

不過建議是使用 Squid$GSI,因為這種寫法比較清楚,經過一段時間之後若我們再回來看這個程式,Squid[, 6] 很容易讓人搞不清楚他到底是什麼,而 Squid$GSI 則是一看就知道他是什麼資料。

另外,還有另外一種寫法:

Squid[, "GSI"]

Squid$GSI 這種寫法無法使用時,就可以改用這種。

R

2 留言

  1. 山崎退

    新手發問~~小弟沒有資訊背景,剛接觸R不久
    請問文章開頭的資料檔squid.txt是需自行建立嗎?
    或者是有載點可下載
    蠻希望跟著板主的文章來練習
    若有不妥還請包涵~~感謝!

    • G. T. Wang

      是我忘記放下載連結,真是抱歉!

      我已經將下載連結放在文章中了,如果還有其他問題請再跟我說,謝謝您。

Comments are Closed