添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
  • 44.2.1 cppFunction() 转换简单的C++函数—Fibnacci例子
  • 44.2.2 sourceCpp() 转换C++程序—正负交替迭代例子
  • 44.2.3 sourceCpp() 转换C++源文件中的程序—正负交替迭代例子
  • 44.2.4 sourceCpp() 转换C++源程序文件—卷积例子
  • 44.2.5 在Rmd文件中使用C++源程序文件
  • 45 R与C++的类型转换
  • 45.1 wrap() 把C++变量返回到R中
  • 45.2 as() 函数把R变量转换为C++类型
  • 45.3 as() wrap() 的隐含调用
  • 46 Rcpp 属性
  • 46.1 Rcpp属性介绍
  • 46.2 在C++源程序中指定要导出的C++函数
  • 46.3 在R中编译链接C++代码
  • 46.4 Rcpp属性的其它功能
  • 46.4.1 自变量有缺省值的函数
  • 46.4.2 允许用户中断
  • 46.4.3 把R代码写在C++源文件中
  • 46.4.4 在C++中调用R的随机数发生器
  • 47 Rcpp提供的C++数据类型
  • 47.1 RObject类
  • 47.2 IntegerVector类
  • 47.2.1 IntegerVector示例1:返回完全数
  • 47.2.2 IntegerVector示例2:输入整数向量
  • 47.3 NumericVector类
  • 47.3.1 示例1:计算元素 \(p\) 次方的和
  • 47.3.2 示例2: clone 函数
  • 47.3.3 示例3:向量子集
  • 47.4 NumericMatrix类
  • 47.4.1 示例1:计算矩阵各列模的最大值
  • 47.4.2 示例2:把输入矩阵制作副本计算元素平方根
  • 47.4.3 示例3:访问列子集
  • 47.5 Rcpp的其它向量类
  • 47.5.1 Rcpp的LogicalVector类
  • 47.5.2 Rcpp的CharacterVector类型
  • 47.6 Rcpp提供的其它数据类型
  • 47.6.1 Named类型
  • 47.6.2 List类型
  • 47.6.3 Rcpp的DataFrame类
  • 47.6.4 Rcpp的Function类
  • 47.6.5 Rcpp的Environment类
  • 48 Rcpp糖
  • 48.1 简单示例
  • 48.2 向量化的运算符
  • 48.2.1 向量化的四则运算
  • 48.2.2 向量化的二元逻辑运算
  • 48.2.3 向量化的一元运算符
  • 48.3 用Rcpp访问数学函数
  • 48.4 返回单一逻辑值的函数
  • 48.5 返回糖表达式的函数
  • 48.6 R与Rcpp不同语法示例
  • 49 用Rcpp帮助制作R扩展包
  • 49.1 不用扩展包共享C++代码的方法
  • 49.2 生成扩展包
  • 49.2.1 利用已有基于Rcpp属性的源程序制作扩展包
  • 49.2.2 DESCRIPTION文件
  • 49.2.3 NAMESPACE文件
  • 49.3 重新编译
  • 49.4 建立C++用的接口界面
  • 50 R编程例子
  • 50.1 R语言
  • 50.1.1 用向量作逆变换
  • 50.1.2 斐波那契数列计算
  • 50.1.3 穷举所有排列
  • 50.1.4 可重复分组方式穷举
  • 50.1.5 升降连计数
  • 50.1.6 高斯八皇后问题
  • 50.2 概率
  • 50.2.1 智者千虑必有一失
  • 50.2.2 圆桌夫妇座位问题
  • 50.3 科学计算
  • 50.3.1 城市间最短路径
  • 50.3.2 Daubechies小波函数计算
  • 50.3.3 房间加热温度变化
  • 50.4 统计计算
  • 50.4.1 线性回归实例
  • 50.4.2 核回归与核密度估计
  • 50.4.3 二维随机模拟积分
  • 50.4.4 潜周期估计
  • 50.4.5 ARMA(1,1)模型估计
  • 50.4.6 VAR模型平稳性
  • 50.4.7 贮存可靠性评估
  • 50.5 数据处理
  • 50.5.1 小题分题型分数汇总
  • 50.5.2 类别编号重排
  • 50.6 文本处理
  • 50.6.1 用R语言下载处理《红楼梦》htm文件
  • 51 使用经验
  • 51.1 文件管理
  • 51.1.1 文件备份
  • 51.1.2 工作空间
  • 51.2 程序格式
  • A R Markdown文件格式
  • A.1 R Markdown文件
  • A.2 R Markdown文件的编译
  • A.2.1 编译的实际过程
  • A.3 在R Markdown文件中插入R代码
  • A.4 输出表格
  • A.5 利用R程序插图
  • A.6 冗余输出控制
  • A.7 代码段选项
  • A.7.1 代码和文本输出结果格式
  • A.7.2 图形选项
  • A.7.3 缓存(cache)选项
  • A.8 章节目录链接问题
  • A.9 其它编程语言引擎
  • A.10 交互内容
  • A.11 属性设置
  • A.11.1 YAML元数据
  • A.11.2 输出格式
  • A.11.3 输出格式设置
  • A.11.4 目录设置
  • A.11.5 章节自动编号
  • A.11.6 Word输出章节自动编号及模板功能
  • A.11.7 HTML特有输出格式设置
  • A.11.8 关于数学公式支持的设置
  • A.11.9 输出设置文件
  • A.12 LaTeX和PDF输出
  • A.12.1 TinyTex的安装使用
  • A.12.2 Rmd中Latex设置
  • A.13 生成期刊文章
  • A.14 附录:经验与问题
  • A.14.1 Word模板制作
  • A.14.2 数学公式设置补充
  • B 用bookdown制作图书
  • B.1 介绍
  • B.2 一本书的设置
  • B.3 章节结构
  • B.4 书的编译
  • B.5 交叉引用
  • B.6 数学公式和公式编号
  • B.7 定理类编号
  • B.8 文献引用
  • B.9 插图
  • B.10 表格
  • B.10.1 Markdown表格
  • B.10.2 kable() 函数制作表格
  • B.10.3 R中其它制作表格的包
  • B.11 数学公式的设置
  • B.12 使用经验
  • B.12.1 学位论文
  • B.12.2 LaTeX
  • B.12.3 算法
  • B.12.4 中文乱码
  • B.12.5 图片格式
  • B.12.6 其它经验
  • B.13 bookdown的一些使用问题
  • C 用R Markdown制作简易网站
  • C.1 介绍
  • C.2 简易网站制作
  • C.2.1 网站结构
  • C.2.2 编译
  • C.2.3 内容文件
  • C.2.4 网站设置
  • C.3 用blogdown制作网站
  • C.3.1 生成新网站的框架
  • C.3.2 网页内容文件及其设置
  • C.3.3 初学者的工作流程
  • C.3.4 网站设置文件
  • C.3.5 静态文件
  • D 制作幻灯片
  • D.1 介绍
  • D.2 Slidy幻灯片
  • D.2.1 文件格式
  • D.2.2 幻灯片编译
  • D.2.3 播放控制
  • D.2.4 生成单页HTML
  • D.2.5 数学公式处理与输出设置文件
  • D.2.6 其它选项
  • D.2.7 slidy幻灯片激光笔失效问题的修改
  • D.3 MS PowerPoint幻灯片
  • D.4 Bearmer幻灯片格式
  • D.5 R Presentation格式
  • References
  • 编著:李东风
  • 直接以变量名或表达式作为命令可以起到用 print() 函数显示的相同效果。

    cat() 函数把字符串、变量、表达式连接起来显示, 其中变量和表达式的类型一般是标量或向量,不能是矩阵、列表等复杂数据。

    scan() 函数可以输入文本文件中的数值向量, 文件名用 file= 选项给出。 文件中数值之间以空格和换行分开。如

    15.2.1 CSV格式

    对于保存在文本文件中的电子表格数据, R可以用read.csv(), read.table(), read.delim(), read.fwf()等函数读入, 但是建议在readr包的支持下用read_csv(), read_table2(), read_delim(), read_fwf()等函数读入, 这些将读入的数据框保存为tibble类型, tibble是数据框的一个变种, 改善了数据框的一些不适当的设计。 readr的读入速度比基本R软件的read.csv()等函数的速度快得多, 速度可以相差十倍, 也不自动将字符型列转换成因子, 不自动修改变量名为合法变量名, 不设置行名。

    对于中小规模的数据, CSV格式作为文件交换格式比较合适, 兼容性强, 各种数据管理软件与统计软件都可以很容易地读入和生成这样格式的文件, 但是特别大型的数据读入效率很低。

    CSV格式的文件用逗号分隔开同一行的数据项, 一般第一行是各列的列名(变量名)。 对于数值型数据, 只要表示成数值常量形式即可。 对于字符型数据, 可以用双撇号包围起来, 也可以不用撇号包围。 如果数据项本身包含逗号, 就需要用双撇号包围。 例如,下面是一个名为testcsv.csv的文件内容, 其中演示了内容中有逗号、有双撇号的情况。

    id,words
    1,"PhD"
    2,Master's degree 
    3,"Bond,James"
    4,"A ""special"" gift"

    为读入上面的内容,只要用如下程序:

    read_csv()还可以从字符串读入一个数据框,如

    read_csv()skip=选项跳过开头的若干行。 当数据不包含列名时, 只要指定col_names=FALSE, 变量将自动命名为X1, X2, ..., 也可以用col_names=指定各列的名字,如

    CSV文件是文本文件,是有编码问题的, 尤其是中文内容的文件。 readr包的默认编码是UTF-8编码。 例如,文件data/bp.csv以GBK编码(有时称为GB18030编码, 这是中文Windows所用的中文编码)保存了如下内容:

    序号,收缩压
    1,145
    5,110
    6, 未测
    9,150
    10, 拒绝
    15,115

    如果直接用read_csv()

    read_csv()将空缺的值读入为缺失值, 将”NA”也读入为缺失值。 可以用na=选项改变这样的设置。 也可以将带有缺失值的列先按字符型原样读入, 然后再进行转换。

    比如,上面的bp.csv文件中, 先将血压列按字符型读入, 再增加一列转换为数值型的列, 非数值转换为NA:

    对每列的类型, readr用前1000行猜测合理的类型, 并在读取后显示猜测的每列类型。

    但是有可能类型改变发生在1000行之后。 col_types选项可以指定每一列的类型, 如"col_double()", "col_integer()", "col_character()", "col_factor()", "col_date()", "col_datetime"等。 cols()函数可以用来规定各列类型, 并且有一个.default参数指定缺省类型。 对因子,需要在col_factor()中用lelvels=指定因子水平。

    可以复制readr猜测的类型作为col_types的输入, 这样当数据变化时不会因为偶尔猜测错误而使得程序出错。如

    设文件data/class.csv内容如下:

    name,sex,age,height,weight
    Alice,F,13,56.5,84
    Becka,F,13,65.3,98
    Gail,F,14,64.3,90
    Karen,F,12,56.3,77
    Kathy,F,12,59.8,84.5
    Mary,F,15,66.5,112
    Sandy,F,11,51.3,50.5
    Sharon,F,15,62.5,112.5
    Tammy,F,14,62.8,102.5
    Alfred,M,14,69,112.5
    Duke,M,14,63.5,102.5
    Guido,M,15,67,133
    James,M,12,57.3,83
    Jeffrey,M,13,62.5,84
    John,M,12,59,99.5
    Philip,M,16,72,150
    Robert,M,12,64.8,128
    Thomas,M,11,57.5,85
    William,M,15,66.5,112

    最简单地用read_csv()读入上述CSV文件,程序如:

    设文件data/dates.csv中包含如下内容,并设其文件编码为GBK:

    序号,出生日期,发病日期
    1,1941/3/8,2007/1/1
    2,1972/1/24,2007/1/1
    3,1932/6/1,2007/1/1
    4,1947/5/17,2007/1/1
    5,1943/3/10,2007/1/1
    6,1940/1/8,2007/1/1
    7,1947/8/5,2007/1/1
    8,2005/4/14,2007/1/1
    9,1961/6/23,2007/1/2
    10,1949/1/10,2007/1/2

    可以先把日期当作字符串读入:

    除了read_csv()函数以外, R扩展包readr还提供了其它的从文本数据读入数据框的函数, 如read_table(), read_tsv(), read_fwf()等。 这些函数读入的结果保存为tibble。 read_table()读入用空格作为间隔的文本文件, 同一行的两个数据项之间可以用一个或多个空格分隔, 不需要空格个数相同, 也不需要上下对齐。 read_tsv()读入用制表符分隔的文件。 read_fwf()读入上下对齐的文本文件。

    read_lines()函数将文本文件各行读入为一个字符型向量。 read_file()将文件内容读入成一整个字符串, read_file_raw()可以不管文件编码将文件读入为一个二进制字符串。

    对特别大的文本格式数据, data.table扩展包的fread()读入速度更快。

    readr包的write_excel_csv()函数将tibble保存为csv文件, 总是使用UTF-8编码,结果可以被MS Office读取。

    文本格式的文件都不适用于大型数据的读取与保存。 大型数据可以通过数据库接口访问, 可以用R的save()load()函数按照R的格式访问, 还有一些特殊的针对大数据集的R扩展包。

    15.3 保存与恢复R变量

    基本R的save()命令可以将一个或者多个当前的R变量保存到文件中, 保存结果是经过压缩的, 在不同的R运行环境中兼容, 但是有可能依赖于R的软件版本。 如save(x, y, file="mydata.RData")。 随后可以用load()命令恢复这些变量到当前环境中, 如load("mydata.RData")可以恢复保存的变量x, y

    推荐使用saveRDS(), 它仅保存单个变量, 如save(x, file="x.RData")。 用loadRDS()载入并返回变量, 如xold <- loadRDS("x.RData")。 但是,saveRDS()保存的文件不适合用于不同计算机之间的数据交换。

    R的arrow扩展包提供了对parquet数据文件格式的支持, 这种文件适用于在不同计算机、不同编程语言之间传递变量值, 包括数据框类型, 对于大规模数据的读写访问效率也比RDS格式文件高。

    15.4 Excel表访问

    15.4.1 借助于文本格式

    为了把Microsoft Excel格式的数据读入到R中, 最容易的办法是在Excel软件中把数据表转存为CSV格式, 然后用read.csv()读取。

    为了把R的数据框保存为Excel格式, 只要用write.csv()readr::write_excel_csv()把数据框保存成CSV格式, 然后在Excel中打开即可。 例如,下面的程序演示了write.csv()的使用:

    为了把Excel软件中数据表的选中区域读入到R中, 可以借助于剪贴板。 在Excel中复制选中的区域,然后在R中用如

    readxl扩展包的readxl()函数利用独立的C和C++库函数读入.xls和.xlsx格式的Excel文件。一般格式为

    15.5.1 连接

    输入输出可以针对命令行,针对文件,R支持扩展的文件类型, 称为“连接(connection)”。

    函数file()生成到一个普通文件的连接, 函数url()生成一个到指定的URL的连接, 函数gzfile, bzfile, xzfile, unz支持对压缩过的文件的访问(不是压缩包,只对一个文件压缩)。 这些函数大概的用法如下:

    函数readLines()readr::read_lines()scan()可以从一个文本型连接读取。

    给定一个打开的连接或文件名, 用readLines函数可以把文件各行读入为字符型向量的各个元素, 不包含文件中用来分开各行的换行标志。 可以指定要读的行数。 如

    readLines()readr::read_lines()writeLines()readr::write_lines()支持分批读写。 这需要预先打开要读取和写入的文件, 所有内容都处理一遍以后关闭读取和写入的文件。

    使用file()函数打开文件用于读写, 使用close()函数关闭打开的文件。 打开文件时可以用encoding=指定编码。

    下面的程序每次将GB18030编码的文件cancer.csv读入至多10行, 转为UTF-8写入tmp.csv中, 使用readLines()writeLines():

    函数save用来保存R变量到文件, 函数load用来从文件中读取保存的R变量。

    函数textConnection打开一个字符串用于读取或写入, 是很好用的一个R功能。 可以把一个小文件存放在一个长字符串中, 然后用textConnection读取,如

    读写文本格式的数据, 或者用readLines()readr::read_lines()读写文本文件, 可能会遇到中文编码不匹配的问题。 这里总结一些常用解决方法, 所用的操作系统为中文Windows10, 在RStudio中运行,R版本为4.2。 常见的中文编码有GBK(或GB18030, GB), UTF-8, UTF-8有BOM标志等。

    可以用iconvlist()查看R支持的编码名称。

    假设有如下的含有中文的文件:

    序号,收缩压
    1,145
    5,110
    6, 未测
    9,150
    10, 拒绝
    15,115

    这个文件是在中文版MS Office的Excel软件中输入后, 用Office的“文件——另存为——.csv格式”生成的, 结果的编码是GBK编码, 或GB18030编码。 文件下载: data/bp.csv

    我们用工具软件将其转换成UTF-8无BOM格式,下载链接: data/bp-utf8nobom.csv

    转为UTF-8有BOM格式,下载链接: data/bp-utf8bom.csv

    15.6.1 用基本R的读取函数读取

    对于GBK编码的文本文件, 较早期的R的基本函数read.csv()read.table()readLines()函数都可以正常读取, 但是,现在的版本就需要使用file函数打开并使用encoding="GBK"说明才能正常读取。 比如,GBK编码的bp.csv的读取:

    readr包的read_csv()read_table2()read_lines()函数默认从UTF-8编码的文件中读取, 无BOM或者有BOM都可以。

    write.csv()writeLines()生成的含有中文的文件的编码在当前R版本(4.2以后)已经使用UTF-8编码, 在较早的R版本中默认为操作系统的默认中文编码。

    readr的write_csv()write_lines()函数生成的含有中文的文件的编码默认UTF-8无BOM。

    目录和文件管理函数:

  • getwd()—返回当前工作目录。
  • setwd(path)—设置当前工作目录。
  • 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()— 从一个全路径文件名获取文件名和目录。
  •