R 摘录笔记

8 篇文章 0 订阅

输入输出

  • print()
  • cat()
  • format()
  • formatC()
  • scan()
  • print()函数可以带一个digits=参数指定每个数输出的有效数字位数,可以带一个quote= 参数指定字符串输出时是否带两边的撇号,可以带一个print.gap=参数指定矩阵或数组输出时列之间的间距。
  • cat()函数也用来输出,但它可以把多个参数连接起来再输出(具有paste()的功能)。例如:
    cat(”i = “, i, “\n”)
    注意使用cat()时要自己加上换行符”\n”。它把各项转换成字符串,中间隔以空格连接起来,然后显示。如果要使用自定义的分隔符,可以用sep=参数,例如: > cat(c(“AB”, “C”), c(“E”, “F”), “\n”, sep=”“)ABCDEFcat()还可以指定一个参数file=给一个文件名,可以把结果写到指定的文件中,如: > cat(“i = “, 1, “\n”, file=”c:/work/result.txt”)如果指定的文件已经存在则原来内容被覆盖。加上一个append=TRUE参数可以不覆盖原文件而是在文件末尾附加,这很适用于运行中的结果记录。
    cat()函数和print()都不具有很强的自定义格式功能,为此可以使用cat()与format() 函数配合实现。
  • format()函数为一个数值向量找到一种共同的显示格式然后把向量转换为字符型。例如: > format(c(1, 100, 10000))[1] ” 1” ” 100” “10000”S-PLUS中的format()函数功能较强,具有较多的控制参数,请参见帮助。
  • R中目前format() 函数功能仍较弱,但R有一个formatC函数可以提供类似C语言的printf格式功能。formatC对输入向量的每一个元素单独进行格式转换而不生成统一格式,例如:  > formatC(c(1, 10000))[1] “1” “1e+004”在formatC()函数中可以用format=参数指定C格式类型,如”d”(整数),”f”‘(定点实数),”e”(科学记数法),”E”, “g”(选择位数较少的输出格式),”G”, “fg”(定点实数但用digits 指定有效位数),”s”(字符串)。可以用width指定输出宽度,用digits指定有效位数(格式为e,E,g,G,fg时)或小数点后位数(格式为f)时。可以用flag参数指定一个输出选项字符串,字符串中有”-”表示输出左对齐,有”0″表示左空白用0填充,有”+”表示要输出正负号,等等。
  • 例如,我们有一个矩阵da中保存了三个日期的年、月、日: > da [,1] [,2] [,3][1,] 99 1 3[2,] 96 11 9[3,] 65 5 18为了输出这三个日期,可以用apply函数指定对每一行作用一个输出函数,此输出函数利用cat()和formatC来控制: > apply(da, 1, function(r)+ cat(formatC(r[1], format=’d’, width=2, flag=’0’), ‘-‘,+ formatC(r[2], format=’d’, width=2, flag=’0’), ‘-‘,+ formatC(r[3], format=’d’, width=2, flag=’0’), ‘\n’, sep=”))99-01-0396-11-0965-05-18NULL这里我们知道apply函数第一个参数指定了一个矩阵,第二个参数说明对行操作还是对列操作,第三个参数是一个函数,这里我们使用了直接定义一个函数作为参数的办法。输出结果中多了一个NULL函数,这是因为我们在交互运行,apply的结果作为一个表达式的值(NULL )会被显示出来。为避免显示,可以把结果赋给一个临时变量名,或者把整个表达式作为invisible() 函数的参数,这时不显示表达式值。
    S的输出缺省显示在交互窗口。可以用sink()函数指定一个文件以把后续的输出转向到这个文件,并可用append参数指定是否要在文件末尾附加: > sink(“c:/work/result.txt”, append=TRUE)> ls()> d> sink()调用无参数的sink()把输出恢复到交互窗口。输入为了从外部文件读入一个数值型向量,S提供了scan()函数。如果指定了file参数(也是第一参数),则从指定文件读入,缺省情况下读入一个数值向量,文件中各数据以空白分隔,读到文件尾为止。例如:
    cat(1:12, ‘\n’, file=’c:/work/result.txt’)
    x <- scan(’c:/work/result.txt’)
    如果文件中是一个用空白分隔的矩阵(或数组),我们可以先用scan()把它读入到一个向量然后用matrix()函数(或array()函数)转换。如:
    y <- matrix(scan(’c:/work/result.txt’), ncol=3, byrow=T)
    实际上,scan()也能够读入一个多列的表格,只要用what参数指定一个列表,则列表每项的类型为需要读取的类型。用skip参数可以跳过文件的开始若干行不读。用sep参数可以指定数据间的分隔符。详见帮助。
    scan()不指定读取文件名时是交互读入,读入时用一个空行结束。
  • 如果要读取一个数据框,S提供了一个read.table()函数。它只要给出一个文件名,就可以把文件中用空白分隔的表格数据每行读入为数据框的一行。比如,文件c:\work\d.txt 中内容如下: Zhou 15 3”Li Ming” 9 李明Zhang 10.2 Wang用read.table读入: > x <- read.table(‘c:/work/d.txt’, as.is=T)> x V1 V2 V31 Zhou 15 32 Li Ming 9 李明3 Zhang 10.2 Wang读入结果为数据框。函数可以自动识别表列是数值型还是字符型,并在缺省情况下把字符型数据转换为因子(加上as.is=T可以保留字符型不转换)。函数自动为数据框变量指定“V1 ”、“V2”这样的变量名,指定“1”、“2”这样的行名。可以用col.names参数指定一个字符型向量作为数据框的变量名,用row.names参数指定一个字符型向量作为数据框的行名。
    read.table()可以读入带有表头的文件,只要加上header=TRUE参数即可。可以用sep 参数指定表行各项的分隔符。例如,为了读入如下带有表头的逗号分隔文件c:\work\d.csv: Name,score, cnZhou,15,3Li Ming, 9, 李明Zhang, 10.2, Wang使用如下语句: > x <- read.table(‘c:/ldf/tmp.txt’, header=T, sep=’,’)> x Name score cn1 Zhou 15.0 32 Li Ming 9.0 李明3 Zhang 10.2 Wang其它一些用法见帮助。

中文兼容问题

  • Rstudio默认编码utf-8
  • 含中文文件导入置顶编码gbk
  • 含中文数据库连接指定编码gbk
  • 字符串通过iconv转化不同编码

option(encoding = "UTF-8")     # 设定编码

read.csv("…", header = F, sep = ",", quote = "\"", fileEncodng = "gbk" )       # 包含中文csv导入设定gbk编码

iconv("…", "UTF-8", "gbk")    # 字符串编码转换

字符到执行语句

dots = list(…)
for(x in names(dots)){
      eval(parse(text = paste(x, "= dots$", x, sep = "")))
}

这里用到 eval_r() 和 parse() 函数。首先使用 parse() 函数将字符串转化为表达式(expression),而后
使用 eval_r() 函数对表达式求解。

x <- 1:10
a <- "print(x)"
class (a)
eval_r(parse(text = a))

by 函数

x = subset(d, read >= 60)  #按read值取子集
by(x, d$prog, colMeans)    #x按prog分类,并应用cloMeans函数;

系统信息等

sessionInfo()  #获得R的版本、基础包、相关包等信息;
ls()           #获取当前对象
rm()           #移除对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值