僅用於記錄R語言學習過程:
內容提要:
自定義函數:function()函數,缺省參數(...)
數據的讀取:文本,excel,SPSS,SAS,STATA格式;
主要的函數有:read.csv()、read.table()、readxl包中的read_excel()函數、XLConnect包中的readWorksheetFromfile()、foreign包中的read.xx()、stringi包中的stri_read_lines()
數據的寫出和導出:文本,excel,SPSS,SAS,STATA格式;
主要的函數有:scan()、cat()、write.csv()、writeLines()
正文:
自定義函數和數據的讀取
n 函數的用法可通過右下角的help-輸入函數名進行查找學習使用
n 自定義函數:自己編寫一個需要用的函數
u 示例:
> my_fun1 <- function(x,y) {
x+y
}
> my_fun1(3,4)
[1] 7
my_fun2 <- function(x,y=2) {
+ x+y
+ }
>
> my_fun2(2,4)
[1] 6
注:即使y已經給了一個固定值,也是可以更改的,也可以只傳入一個值,如my_fun2(1)
關於缺省參數,用‘...’表示,代表着有多個參數但是並沒有完全寫出來,在調用時可根據需要賦值,舉例:
value <- c(sqrt(1:100))
my_fun3 <- function(x,...) {
print(x)
summary(...)
}
此處省略了summary()函數的參數,可以根據后面的賦值進行返回
> my_fun3('Here is summary for values:',value,digit =2)
[1] "Here is summary for values:"
Min. 1st Qu. Median Mean 3rd Qu.
1.000 5.074 7.106 6.715 8.675
Max.
10.000
addmup <- function(x,...) {
args <-list(...)
for (a in args) x <- x+a
x
}
addmup(1,2,3,4,5)
normalize <- function(x,m = mean(x,...),s = sd(x,...),...) {
(x-m) / s
}
normalize(x = 1:100)
學習重點:function()函數的用法(自定義函數),缺省參數(…)的用法,構造形式:
構造函數 {
執行的程序}
給函數賦值
n 數據的讀取
u File import Dataset
l .csv(逗號分隔符文件),skip跳過前面的幾行
u read.csv() R的內置函數,用於數據讀取,參數設置:
read.csv(file = ‘完整路徑,要加上文件的后綴名’,header = TRUE是指把第一行當做變量名,sep = ‘,’ 是指分隔符,row.names = 可傳入字符串向量,用來定義每一行的名稱;col.names 用於定義列名,na.strings = c(‘ ’,000,999)用於定義缺失值,stringAsFactors =TRUE 把字符串轉換成因子)
示例:my_file2 <- read.csv(file = '絕對路徑.csv',header = TRUE)
u 如何把excel文件轉換成csv文件:文件—另存為
u 如何讀取文本文件(txt或xls格式的) read.table ,參數設置與read.csv是一致的。
示例:my_file3<- read.table(file = '絕對路徑.txt',header = TRUE)
u 如何快速讀取excel文件,用readxl 包,path相當於file,默認第一行為列名
my_file4 <- read_excel(path = '絕對路徑','')
但如果excel中數據過多會報錯,解決辦法:
當用EXCEL作為數據存儲目標,從數據庫導出數據時由於EXCEl的設置最多只能導入65533條數據。導入之后用編輯軟件查看和編輯改文件沒有問題,但是使用分析軟件讀取時卻可能發生錯誤。
例如,使用R讀取時,會報如下錯誤:
Error in read_fun(path = path, sheet = sheet, limits = limits, shim = shim, :
std::bad_alloc
顯示內存分配錯誤,為了解決這個問題最簡單的辦法是另存為CSV格式,或者一開始就將數據導入到CSV文件中
u XLConnect包中有一個readWorksheetFromFile()函數,方便數據的局部讀取。參數設置如下:
my_file5 <- readWorksheetFromFile(file = 'D:\\analysis\\test.xlsx',sheet = 1,startRow = 5,endRow =10,startCol = 2,endCol = 4)
u 如何讀取SPSS SAS STATA 三種格式的數據
l Flie import Dataset
l 用foreign擴展包中的read.spss()函數讀取SPSS格式的函數
my_spss <- read.spss(file = '絕對路徑.sav',to.data.frame = TRUE()指的是轉換成數據框,TRUE代表是)
l 用foreign擴展包中的read.ssd()函數讀取SAS格式的函數
l 用foreign擴展包中的read.dta()函數讀取STATA格式的函數
l 文本的讀取:使用readLines()內置函數
my_text<-readLines(con = '絕對路徑.txt')
讀取基因序列的文本:my_seq <- readLines(con = '絕對路徑.fasta')
l 用stringi擴展包中的stri_read_lines()函數,也可以導入基因序列
my_seq2 <- stri_read_lines('絕對路徑.fasta')
l 的
n 數據的寫出和導出
u scan()函數:x<- scan() 在控制台輸入數字,按兩次回車結束輸入,輸入x,得到返回值
u cat()函數:可以實現寫出控制台上,也可以寫在文件中:
cat(1:10)
cat(1:10,file = ‘絕對路徑.txt’)
u 導出csv文件:用write.csv()函數
write.csv(my_file2(文件名),file = '絕對路徑/newfile.csv') #newfile是此處新建的
u 導出excel文件,直接在導出時選擇csv格式
write.csv(my_file3(文件名),file = '絕對路徑/newfile.csv') #file3為excel文本
u 導出文本文件:writeLines()函數
u 用foreign擴展包中相應的寫出的函數(如STATA),具體可從help中查找
注:在遇到新函數時可從help中學習用法,在使用函數參數是,可按Tab查看可選參數及使用方法。