skip to content

R
R 语言知识点杂记

数据类型

  • Vectors :向量是 R 中最基本的数据类型,它由一系列相同数据类型的元素组成。R中的向量可以是数值型、字符型、逻辑型等。
  • Matrix :矩阵是二维的数据结构,其中包含相同数据类型的元素。可以通过函数 matrix() 创建矩阵,或者将向量转换为矩阵。
  • Data Frame :数据框是一种类似于表格的数据结构,其中不同的列可以包含不同的数据类型。数据框是处理和分析数据的常见数据类型。可以通过函数 data.frame() 创建数据框。
  • List :列表是一种特殊的向量,它可以包含不同数据类型的元素,甚至可以包含其他的列表。

R 语言的标准差

当我们按照课本里的公式去实现一个求标准差的函数时大概是这样的

get_sd <- function(vec) {
  square_sum <- 0
  vec_length <- length(vec)
  vec_mean <- mean(vec)
  for (item in vec) {
    square_sum <- square_sum + (item - vec_mean) ^ 2
  }
  vec_sd <- sqrt(square_sum / vec_length)
  return(vec_sd)
}

但是当我们使用 R 语言中自带的 sd 函数计算标准差的时候答案却不太一样

测试数据 num_vec <- c(1, 2, 3, 4)

测试结果

get_sd(num_vec)
# [1] 1.118034
sd(num_vec)
# [1] 1.290994

那么问题到底出现在哪一个环节呢

一通 Google 后在 Standard Deviation in R Seems to be Returning the Wrong Answer - Am I Doing Something Wrong?找到了答案

意思大致是说 R 语言中内建的 sd 函数计算的是样本标准差而我们书本里教的则是整体标准差

样本标准差的时候分母是 n-1整体标准差的分母则是 n

分母的差别造成了两次实验结果的差异

为什么样本方差(sample variance)的分母是 n-1? - 张英锋的回答 - 知乎

标准差和方差

R 语言的返回值

  • R 语言中 return 本身就是一个函数,所以必须使用 return(...) 的方式,括号不能省略;这意味着显式返回变成一种函数调用,可能降低程序运行效率。
  • 不使用 return 也可以提供返回值,所以 R 语言的普遍习惯用法是避免显式调用 return()
  • 如果显式调用 return() 可以使得函数的结构更加清楚,那就尽管调用吧,没有问题。

参考资料:StackOverflow - Explicitly calling return in a function or not

NA 与 NULL 的区别

在 R 语言中,缺失值用 NA表示,空值用NULL表示。初学者在学习 R 语言时,一般都会被这两者弄糊涂,常常错误地把这两者视为等价的。

R 语言中"NA"与"NULL"的区别

library() 与 require() 的区别

library()require() 都可以载入包,但二者存在区别。

在一个函数中,如果一个包不存在,执行到 library 将会停止执行,require 则会继续执行。

require 将会根据包的存在与否返回 TRUE 或者 FALSE

What is the difference between require() and library()?

apply 函数族

03

  • lapply

    • apply function over list or vector
    • output = list
  • sapply

    • apply function over list or vector
    • try to simplify list to array
  • vapply

    • apply function over list or vector
    • explicitly specify output format

A brief introduction to “apply” in R

掌握 R 语言中的 apply 函数族

碰到的函数

函数功能
rnorm生成一系列的随机数
strsplit分割字符串
sd计算样本标准差
args获得函数参数
sample对数据进行抽样
gsub用于对的删减、增补、替换和切割
identical判断两个对象是否相等
cat连接并输出
runif生成均匀分布随机数

数字相关函数

函数功能
abs取绝对值
sum求和
mean求平均住
round四舍五入
floor向下取整
ceiling向上取整
trunc向零的方向截取
signif保留有效数字

数据相关函数

函数功能
seqGenerate sequences, by specifying the from, to, and by arguments.
repReplicate elements of vectors and lists.
sortSort a vector in ascending order. Works on numerics, but also on character strings and logicals.
revReverse the elements in a data structures for which reversal is defined.
strDisplay the structure of any R object.
appendMerge vectors or lists.
is.*()Check for the class of an R object.
as.*()Convert an R object from one class to another.
unlistFlatten (possibly embedded) lists to produce a vector.

正则表达式相关函数

函数功能
greplwhich returns TRUE when a pattern is found in the corresponding character string
grepwhich returns a vector of indices of the character strings that contains the pattern
subreplace first match
gsubreplace all matches

如何安装 XLConnect

  1. 安装 JDK

  2. 配置 JAVA_HOME

    Sys.setenv(JAVA_HOME='D:\\Program Files\\Java\\jre1.8.0_202')
    
  3. 安装 XLConnect

    install.packages("XLConnect")