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。

Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.