R script 入门教程

R 脚本语言入门    R语言教程

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]])))
    }
}

  

posted on 2022-02-10 15:59  iUpoint  阅读(453)  评论(0编辑  收藏  举报

导航