Skip to content

R & RStudio Troubleshooting Guide

anniehuang921 edited this page May 4, 2016 · 14 revisions

一、安裝疑難排解

Q:RStudio安裝後,啟動時顯示有錯誤?

  • 請依照不同作業系統下載R 與R的輔助開發編輯器R Studio,並記得先安裝R、再安裝RStudio
  • Win 7 若是使用中文名稱作為主要使用者帳號,R Studio可能會無法正常運作,建議另設一英文帳號安裝。

Q:如何安裝套件? 有兩種作法:

  1. install.package("套件名稱")
  2. 使用UI: Tools -> Install Packages….

Q:為什麼套件安裝失敗?

  • 請先確認網路連線狀況
  • 請上CRAN確認目前R和RStudio安裝版本是否適用此套件

Q:如何載入套件?

  • 套件必須先經過安裝,才能載入
  • library("套件名稱") 可以成功load進來使用函數
  • 可以利用 installed.package("套件名稱") 來查詢套件是否已經被安裝
  • 也可以在 R Studio 右下角視窗中的 Packages 頁面查詢套件是否被有列出,(欲載入該套件,在套件名稱前核取方塊即可)
  • 部分套件在load時會顯示一些以紅字表示的提示訊息,有時是該套件中的函數覆蓋R的基本函數(如dplyr中也有filter),有時是其他訊息(如開發社群mailing list),但這些都不一定是error,請放心使用。

二、資料讀取

Q:為什麼資料讀不進來?

  • 請確認資料檔案的路徑是否正確,可使用getwd()取得目前位置。
  • 請確認檔案格式。Mac系統預設格式是utf-8,Win系統則是big-5(正體中文)。必要時進行轉碼後再讀檔。
  • 確認工具很多,用LibreOffice比較簡便。開啟檔案後,請在Save As..中點選下方Edit Filter Setting,之後會出現選擇編碼的對話方塊,再選擇適當編碼即可。

Bouns:在R的環境中做編碼轉換的範例,以北市實價登錄資料 (A_lvr_land_A.CSV) big5轉utf8為例:(參考網址:https://goo.gl/KxErJ8)

 data <- readLines("Desktop/A_lvr_land_A.CSV", encoding="big5") # 讀取實價登入資料,是一行一行讀取進來。
 data <- iconv(data, "big5", "utf8") # 將資料轉成 UTF-8。

 column_count <- length(strsplit(data[1], ",")[[1]])
row_count <- length(data) # 計算 column 與 count 個數。

 fix_data <- matrix(NA, nrow = row_count, ncol = column_count) # 建立一個空的 NA 矩陣,維度來自於 row_count 與 column_count。

 for(row in 1:row_count) {
     for(col in 1:column_count) {
         fix_data[row,col] <- strsplit(data[row], ",")[[1]][col] # 執行 for loop 將資料塞入 fix_data。
     }
 }

 write.table(fix_data[2:row_count,], file = "fix_A_lvr_land_A.CSV", sep = ",", col.names = fix_data[1,]) # 將資料輸出,輸出注意一點,因為第一 row 是欄位名稱,所以記得指標要從 2 開始,指標 1 的部分要放到 col.names。

Q:資料裡面有中文,但讀進來是亂碼?

  • Windows版本R Studio的另一個issue (原身的R console不會亂碼),是讀取正常但左上角View中是亂碼。如果以head(), sample()等函數取出一部分data frame,在console頁面可看見正常編碼中文,那資料便可以使用。

Q:Windows 使用者資料讀進來後,中文內容可以顯示,但是中文欄位名稱顯示亂碼

  • 在命令列執行 Sys.getlocale(category = "LC_ALL") 檢查您的環境是否類似以下結果:
[1] "LC_COLLATE=Chinese (Traditional)_Taiwan.950;LC_CTYPE=Chinese (Traditional)_Taiwan.950;LC_MONETARY=Chinese (Traditional)_Taiwan.950;LC_NUMERIC=C;LC_TIME=Chinese (Traditional)_Taiwan.950"
  • 如果不是,請在命令列執行 Sys.setlocale(category = "LC_ALL", locale = "cht")
  • Mac 使用者 Sys.setlocale(category = "LC_ALL", locale = "zh_TW.UTF-8")
  • 一勞永逸的做法就是自訂 .Rprofile 檔,請執行以下程式碼,會在 Mac 的 Home 目錄下新增一個 .Rprofile 檔,每次開啟 R-studio 時會自動執行 Sys.setlocale(category = "LC_ALL", locale = "zh_TW.UTF-8")
cat('
Sys.setlocale(category = "LC_ALL", locale = "zh_TW.UTF-8")
', file = '~/.Rprofile', append = TRUE)

Q:讀進來的data frame欄位名稱是中文,無法使用? R Studio雖採自然語言處理,但有時並不完全支援中文欄位,請以names(data.frame名稱) <- c("新欄位名稱1","新欄位名稱2",.....) 將欄位名稱重新編寫成英文。

Q:read.csv, windows 讀取中文檔案出問題,可嘗試改寫以下程式

# Sol(1)
f <- read.csv("中文檔.csv", fileEncoding = "big5")

# Sol(2)
f$var <- iconv(f$var, from = "utf8", to = "big5")

三、繪圖

Q:座標軸標籤出現方塊,無法正常顯示中文?

  • Mac的預設字型serif沒有中文,請在呼叫繪圖函數前先以par(family="STHeiti")重新設定字型。
  • 另外要注意的是,Rmarkdown使用Post Script字形,有時即使以par重新設定還是無法正常顯示。

四、R語言基礎指令

Q: 請問 dat$hour == "0" 中的 雙等號(==) 是什麼意思,為什麼不用單等號(=)。 A:在R中,單等號是賦值的意思 (把右邊的值賦予左邊的變數),而雙等號是判斷的意思 (判斷左右兩變數是否相等),舉例如下:

> a = 1 # 把 數值1 指向 變數a
> a
[1] 1
> a == 1 # 判斷 a 是否為 1
[1] TRUE
> a == 2 # 判斷 a 是否為 2
[1] FALSE

Q: 在Factor的範例中,為什麼已經設定了level,卻又要取得level? A: 設定Level的時機:例如確定問卷中的血型資料只有四種,設定level可以讓填錯的資料變成NA,之後可以用排除NA來去除填錯的資料。取得Level的時機:讀取外部資料的欄位時,可以看資料的Level來確認資料是否make sense。