R script 入门教程
Sys.time() Sys.sleep(1) install.packages("") #安装R包 例如install.packages("ggplot2") library() #加载R包 例如library(ggplot2) help.start() #打开帮助文档首页 help("fun")或?fun #查看函数fun的的帮助 help.search("fun")或??fun #以fun为关键词搜索本地帮助文档 example("fun") #函数fun的使用示例 RSiteSearch("fun") #以fun为关键词搜索在线文档和邮件列表 apropos("fun",mode="function") #列出名称中含有fun的所有可用函数 data() #列出当前已加载包中所含的所有可用示例数据集 # sites.json { "id":["1","2","3"], "name":["Google","Runoob","Taobao"], "url":["www.google.com","www.runoob.com","www.taobao.com"], "likes":[ 111,222,333] } library("rjson") # 获取 json 数据 path = gsub("\\\\", "/", 'D:\\sites.json') result <- fromJSON(file = "sites.json") # 矩阵 mat <- matrix(c(3:14), nrow = 4, byrow = TRUE) print(mat) rownames = c("row1", "row2", "row3", "row4") colnames = c("col1", "col2", "col3") P <- matrix(c(3:14), nrow = 4, byrow = TRUE, dimnames = list(rownames, colnames)) print(P) # 向量 li = c(1,2,3) print(li) y = c("1"=4, "2"=5, "3"=6) names(y) = NULL li = rep(c(4,3,2,1),c(2,2,2,1)) li = seq(1,7,0.5) # 创建数组 result <- array(c(vector1,vector2),dim = c(3,3,2)) print(result) # 列表 thisdict <-list( brand = letters[1:3], model = c('1-10','2-20','3-30'), KK = 1:4 ) thisdict[['brand'] thisdict$brand # 因子 x <- c("男", "女", "男", "男", "女",levels=c('男','女')) sex <- factor(x) print(sex) print(is.factor(sex)) sex=factor(c('f','m','f','f','m'),levels=c('f','m'),labels=c('female','male'),ordered=TRUE) print(sex) # 数据框 table = data.frame( 姓名 = c("张三", "李四"), 工号 = c("001","002"), 月薪 = c(1000, 2000) ) print(table) #正态分布 rnorm(n=as.numeric(args[1]), mean=as.numeric(args[2])) # 循环 for(i in 1:length(args)){ eval(parse(text=args[[i]])) } #自定义函数 roll<-function(){ dice<-sample(1:6,2,replace = T)#可重复抽样 sum(dice) } roll() # 查看R支持的编码文件格式 iconvlist() # 文件和目录管理函数 getwd() 返回当前工作目录。 setwd(path) 设置当前工作目录。 Sys.getlocale() Sys.setlocale(category = "LC_ALL", locale = "Chinese") # 将本地语言默认为中文 list.files()或dir() 查看目录中内容。 list.files(pattern=’.*[.]r$’)可以列出所有以“.r”结尾的文件。 file.path() 把目录和文件名组合得到文件路径。 file.info(filenames) 显示文件的详细信息。 file.exists() 查看文件是否存在。 file.access() 考察文件的访问权限。 create.dir() 新建目录。 file.create() 生成文件。 file.remove()或unlink() 删除文件。unlink()可以删除目录。 file.rename() 为文件改名。 file.append() 把两个文件相连。 file.copy() 复制文件。 basename()和dirname() 从一个全路径文件名获取文件名和目录。 # 读写文本文件 ll <- readLines("data/class.csv") print(head(ll, 3)) ll <- readr::read_lines("data/class.csv") print(head(ll, 3)) vnames <- strsplit(ll, ",")[[1]] writeLines(vnames, "class-names.txt") readr::write_lines(vnames, "class-names.txt") vnames <- scan( "class-names.txt", what=character(), quiet=TRUE) # 文本文件分批读写 fin <- file("data/cancer.csv", "rt") fout <- file("tmp.csv", "wt", encoding="UTF-8") repeat{ lines <- readLines(fin, n=10) cat("Read", length(lines), "lines.", "\n") if(length(lines)==0) break writeLines(lines, fout) } close(fout) close(fin) # 读写CSV文件 fstr <- "name,score 王芳,78 孙莉,85 张聪,80 " d <- read.csv(textConnection(fstr), header=TRUE) library("readr") d.small <- read_csv("name,x,y John, 33, 95 Kim, 21, 64 Sandy, 49, 100 ") d.small <- read_csv("John, 33, 95 Kim, 21, 64 Sandy, 49, 100 ", col_names=c("name", "x", "y") ) data <- read_csv("sites.csv", encoding="UTF-8") d <- read_csv("data/bp.csv", locale=locale(encoding="GBK")) print(data) like <- max(data$likes) #is.data.frame #as.numeric() #as.character() #as.Date(d.dates[["出生日期"]], format='%Y/%m/%d') print(like) retval <- subset(data, likes == 222) print(retval) # 写入新的文件 write.csv(retval, "runoob.csv", row.names = FALSE) d1 <- tibble("学号"=c("101", "103", "104"), "数学"=c(85, 60, 73), "语文"=c(90, 78, 80)) write.csv(d1, file="tmp1.csv", row.names=FALSE) # 读写剪切板 myDF <- read.delim("clipboard") write.table(iris, file="clipboard", sep = "\t", row.names=FALSE, col.names = NA) # 读写excel - readxl read_excel(path, sheet = 1, col_names = TRUE, col_types = NULL, na = "", skip = 0) # 标准输入输出流 #1) 从标准输入流中读取数据 a <- read.table(stdin()) #2)打印信息到标准输出流 write("I am stdout", stdout()) #3) 打印错误信息到标准错误流 write("I am stderr", stderr()) # 输出重定向文本 # append = TRUE 追加文本,split = TRUE 可将输出同时发送到屏幕和文件中 # 不带后缀则存储的是R脚本 sink("myoutput", append = TRUE, split = TRUE) #此时工作目录中会出现一个名为"myoutput"的空文件 source("script.R") # print.eval=TRUE, echo=TRUE 显示源代码 sink() # 参考:https://www.itranslater.com/qa/details/2583846506029646848 arg1 <- 1 arg2 <- 2 system(paste("Rscript file_to_source.R", arg1, arg2)) # 输出重定向图像 pdf("mygraph.pdf") #此时工作目录中将会生成一个名为mygraph的空白pdf文档 source("script.R") dev.off() #此时图形才真正保存在pdf文档中 #执行完以下代码后,屏幕输出结果,同时文本和图形也分别存储到了文件中。 sink("myoutput", append = TRUE, split = TRUE) pdf("mygraph.pdf") source("script.R") sink() dev.off() #cat 可以连接 ... 中的对象,并将其输出到屏幕或文件中 cat(... , file = "myfile", append = FALSE) name <- "Bob" cat("Hello", name, "\b.\n", " Isn\'t R", "\t", "great?\n", file = "cattest.txt") #writeLines writeLines(text, con = stdout(0, sep ="\n", useBytes = FALSE) lin <- c("Hello Bob", "Isn\'t R great?") writeLines(lin, con = "lindata.txt") # 文件链接 file("path", open="", blocking=T, encoding = getOption("encoding"), raw = FALSE) url(description, open = "", blocking = TRUE, encoding = getOption("encoding")) textConnection(description, open="r", local = FALSE, encoding = c("", "bytes", "UTF-8")) gzfile(description, open = "", encoding = getOption("encoding"), compression = 6) bzfile(description, open = "", encoding = getOption("encoding"), compression = 9) xzfile(description, open = "", encoding = getOption("encoding"), compression = 6) unz(description, filename, open = "", encoding = getOption("encoding")) # 二进制文件访问 save(data01, file="data01.RData") save(x, y, file="saved20210811.RData") save(list=c("x", "y"), file="saved20210811.RData") load("saved20210811.RData") # 判断文件是否存在 if (file.access("xxx.R", mode = 0) == 0){ source("xxx.R") } else { print("File not found") } #使用命令行参数运行R程序 #args_test.R 代码如下: Args <- commandArgs() #Args <- commandArgs(trailingOnly = TRUE) #只接收R脚本后面的参数 cat("Args[1]=",Args[1],"\n") cat("Args[2]=",Args[2],"\n") cat("Args[3]=",Args[3],"\n") cat("Args[4]=",Args[4],"\n") cat("Args[5]=",Args[5],"\n") cat("Args[6]=",Args[6],"\n") cat("Args[7]=",Args[7],"\n") #运行如下: #Rscript myScript.R "a=5" "b=100" #$ R CMD BATCH --no-save --no-restore "--args a=1 b=c(2,5,6)" test.R test.out & Rscript args_test.R AAA BBB R CMD BATCH args_test.R AAA BBB #结果如下: Args[1]= /usr/local/lib64/R/bin/exec/R Args[2]= /usr/local/lib64/R/bin/exec/R Args[3]= --no-restore Args[4]= --file=args_test.R Args[5]= --args Args[6]= AAA Args[7]= BBB # R CMD BATCH --no-save --no-restore '--args a=1 b=c(2,5,6)' test.r test.out & # test.r args <- commandArgs(TRUE) if(length(args)==0) { print("No arguments supplied.") ##supply default values a = 1 b = c(1,1,1) }else { for(i in 1:length(args)) { print(args[i]) print(parse(text=args[[i]])) print(eval(parse(text=args[[i]]))) } }