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

      

  • 相关阅读:
    反素数(暴力)
    More Divisors(反素数)
    CodeForces
    Binary Tree(二叉树+思维)
    Friendship of Frog(水题)
    内网jenkins如何配置gitlab自动拉取代码打包
    配置git使用ssh方式克隆gitlab的代码
    centOS7创建python虚拟环境
    CentOS7下安装JDK
    centOS安装python3 以及解决 导入ssl包出错的问题
  • 原文地址:https://www.cnblogs.com/iupoint/p/15879533.html
Copyright © 2020-2023  润新知