R语言编程艺术学习(1)

###R语言编程艺术=====

####chr1.快速入门======

#交互模式

mean(abs(rnorm(100)))

rnorm(10)

source("z.R")

#批处理模式

setwd("/Users/tang/Downloads/R语言编程艺术/")

#shell命令运行脚本

#R CMD BATCH z.R

data() ##查看内置数据集

mean(Nile)

sd(Nile)

hist(Nile)

hist(Nile, breaks = 12)

q() #linux ctrl-d mac:cmd-d

#赋值运算符:<-,=(特殊情况下失灵)

#超赋值运算符:<<-(在函数内部给全局变量赋值)

x <- c(5, 12, 13)

mode(x)

typeof(x)

y <- "abc"

mode(y)

typeof(y)

u <- paste("abc", "de", "f", sep = ":")

v <- unlist(strsplit(u, split = ":"))

m <- rbind(c(1, 4), c(2, 2))

m

m %*% c(1,1)  ##%*%矩阵乘法

x <- list(u = 2, v = "abc")

x

#列表的常用方法:函数多个返回值打包返回

hist(Nile)

hn <- hist(Nile)

hn

str(hn)

#数据框本质上是列表(每个组件元素个数相等)

d <- data.frame(list(kids = c("jack", "jill"), ages = c(12, 10)))

d$ages

#类

print(hn)

summary(hn)

###chr2.向量======

#主题:循环补齐\筛选\向量化

#变量类型称为模式(mode),程序中查看可用typeof(x)

x <- c(1, 2, 4)

length(x)

#矩阵和数组本质上也是向量(区别是具有额外属性:维度)

m <- rbind(c(1, 2), c(3, 4))

m + 10:13

m

y <- vector(mode = "character", length = 2)

y[1] <- 3

y[2] <- 4

typeof(y)

y

c(1, 2, 4) + c(6, 0, 9, 20, 22)

#运算符也是一种函数

2 + 3

"+"(2, 3)

x <- c(1, 2, 4)

x + c(5, 0, -1)

x * c(5, 0, -1)

x %*% c(5, 0, -1)

y <- c(1.2, 3.9, 0.4, 0.12)

y[c(1, 3)]

y[2:3]

v <- 3:4

y[v]

#元素重复是允许的

x<- c(4, 2, 17, 5)

y <- x[c(1, 1, 3)]

y

#负数下标代表想把相应元素删除

z <- c(5, 12,  13)

z[-1]

z[-1:-2]

z[1:(length(z)-1)]

z[-length(z)]

#":"使用时注意运算符优先级问题

i <- 2

1:i-1#:优先级高于-

1:(i-1)#()优先级高于-

# ?Syntax获取优先级的详细说明

seq(from = 12, to = 30, by = 3)

seq(from = 1.1, to = 2, by = 0.1)

#循环时避免使用length,改用seq

#rep(x, times)\rep(x, each)

#all\any:分别报告其参数是否至少有一个还是全部为TRUE

x <- 1:10

all(x > 8)

any(x > 88)

all(x > 88)

all(x > 0)

x > 8

any(x > 8)

##扩展案例:寻找连续出现1的游程

findruns <- function(x, k){

n <- length(x)

runs <- NULL

for(i in 1:(n-k+1)){

if(all(x[i:(i+k-1)] == 1)){

runs <- c(runs, i)

}

}

return(runs)

}

y <- c(1, 0, 0, 1, 1, 1, 0, 1, 1)

findruns(y, 3)

findruns(y, 2)

findruns(y, 6)

#每次调用c(runs, i)会重新分配内存,减慢代码运行速度

findruns1 <- function(x, k){

n <- length(x)

runs <- vector(length = n)

count <- 0

for(i in 1:(n-k+1)){

if(all(x[i:(i+k-1)] == 1)){

count <- count + 1

runs[count] <- i

}

}

if(count > 0){

runs <- runs[1:count]

}else runs <- NULL

return(runs)

}

y <- c(1, 0, 0, 1, 1, 1, 0, 1, 1)

findruns1(y, 3)

findruns1(y, 2)

findruns1(y, 6)

#预测离散值时间序列

preda <- function(x, k){

n <- length(x)

k2 <- k/2

pred <- vector(length = n-k)

for(i in 1:(n-k)){

if(sum(x[i:(i+k-1)]) >= k2) pred[i] <- 0 else pred[i] <- 0

}

return(mean(abs(pred - x[(k+1):n])))

}

#predb

predb <- function(x, k){

n <- length(x)

k2 <- k/2

pred <-vector(length = n-k)

sm <- sum(x[1:k])

if(sm >= k2) pred[1] <- 1 else pred[1] <- 0

if(n-k > 0){

for(i in 2:(n-k)){

sm <- sm + x[i+k-1] - x[i-1]

if(sm >= k2) pred[i] <- 1 else pred[i] <- 0

}

}

return(mean(abs(pred - x[(k+1):n])))

}

#predc

predc <- function(x, k){

n <- length(x)

k2 <- k/2

pred <- vector(length = n-k)

csx <- c(0, cumsum(x))

for(i in 1:(n-k)){

if(csx[i+k] - csx[i] >= k2) pred[i] <- 1 else pred[i] <- 0

}

return(mean(abs(pred - x[(k+1):n])))

}

#向量化运算符

#向量输入、向量输出

u <- c(5, 2, 8)

v <- c(1, 3, 9)

u > v

w <- function(x) return(x + 1)

w(u)

sqrt(1:9)

y <- c(1.2, 3.9, 0.4)

z <- round(y)

z

round(1.2)

y <- c(12, 5, 13)

y + 4

"+"(y, 4)

f <- function(x, c) return((x + c)^2)

f(1:3, 0)

f(1:3, 1:3)

f <- function(x, c){

if(length(c) > 1) stop("vector c is not allowed")

return((x+c)^2)

}

f(1:3, 1:3)

f(1:3, 0)

#向量输入,矩阵输出

z12 <- function(z) return(c(z,z^2))

x <- 1:8

z12(x)

matrix(z12(x), ncol = 2)

sapply(1:8, z12)

#NA与NULL

#NA的使用

x <- c(88, NA, 12, 168, 13)

x

mean(x)

mean(x, na.rm = TRUE)

x <- c(88, NULL, 12, 168, 13)

mean(x)

x[2]

#NA值模式

x <- c(5, NA, 12)

mode(x[1])

mode(x[2])

y <- c("abc", "def", NA)

mode(y[2])

mode(y[3])

#NULL的使用

#(1)用于循环中创建向量

z <- NULL

for(i in 1:10) if(i %% 2 == 0) z <- c(z, i)

z

seq(2, 10, 2)

2 * 1:5

z <- NA

for(i in 1:10) if(i %%2 == 0) z <- c(z, i)

z

u <- NULL

length(u)

v <- NA

length(v)

#2.8 筛选

z <- c(5, 2, -3, 8)

w <- z[z * z > 8]

w

z

z*z > 8

y <- c(1, 2, 30, 5)

y[z^2 > 8]

x <- c(1, 3, 8, 2, 20)

x[x > 3] <- 0

x

x <- c(6, 1:3, NA, 12)

x

x[x > 5]

subset(x, x > 5)

which(z^2 > 8)

fisrst1 <- function(x){

for(i in 1:length(x)){

if(x[i] == 1) break

}

return(i)

}

first1a <- function(x) return(which(x == 1)[1])

#向量化ifelse函数

#ifelse(b, u, v)

x <- 1:10

y <- ifelse(x %%2 == 0, 5, 12)

y

x <- c(5, 2, 9, 12)

ifelse(x > 6, 2*x, 3*x)

时间: 2024-08-02 23:06:38

R语言编程艺术学习(1)的相关文章

R学习:《R语言编程艺术》中文PDF+英文PDF+代码

R语言是流行的用于数据处理和统计分析的脚本语言.考古学家用它来跟踪古代文明的传播,医药公司用它来探索哪种药物更安全.更有效,精算师用它评估金融风险以保证市场的平稳运行.总之,在大数据时代,统计数据.分析数据都离不开计算机软件的支持,在这方面R语言尤其出色. <R语言编程艺术>从最基本的数据类型和数据结构开始,到闭包.递归和匿名函数等高级主题,由浅入深,讲解细腻,读者完全不需要统计学的知识,甚至不需要编程基础.而书中提到的很多高级编程技巧,都是作者多年编程经验的总结,对有经验的开发者也大有裨益.

R语言编程艺术(1)快速入门

这本书与手上其他的R语言参考书不同,主要从编程角度阐释R语言,而不是从统计角度.因为之前并没有深刻考虑这些,因此写出的代码往往是一条条命令的集合,并不像是"程序",因此,希望通过学习这本书,能提高编程效率,以及让自己更像是一个"程序员". 本文对应<R语言编程艺术>第1章:快速入门. 生成向量的函数c(),这里c表示"连接"(concatenate) 打印列表方式: print(listname) str(listname) 第一种将

分享《R语言编程艺术》+PDF+源码+Norman Matloff+陈堰平 邱怡轩 潘岚锋 熊熹

下载:https://pan.baidu.com/s/1RSO_ZHXcaLFDNuPmkhFJdQ 更多资料分享:http://blog.51cto.com/14087171 <R语言编程艺术>中文版PDF+英文版PDF+源代码 中文和英文两版对比学习, 带目录书签: 配套源代码: 经典书籍,讲解详细. 原文地址:http://blog.51cto.com/14087171/2321667

R语言编程艺术(2)R中的数据结构

本文对应<R语言编程艺术>第2章:向量:第3章:矩阵和数组:第4章:列表:第5章:数据框:第6章:因子和表 ========================================================================= R语言最基本的数据类型就是向量(vector),单个数值和矩阵都是向量的一种特例. 声明:R中不需要声明变量,但是注意函数式语言的特性,如果读写向量中的元素时,R事先不知道对象是向量的话,则函数没有执行的对象.如下代码是无法工作的: y[1]

R语言编程艺术# 数据类型向量(vector)

R语言最基本的数据类型-向量(vector) 1.插入向量元素,同一向量中的所有的元素必须是相同的模式(数据类型),如整型.数值型(浮点数).字符型(字符串).逻辑型.复数型等.查看变量的类型可以用typeof(x)函数查询. > #插入向量元素 > x <- c(88,5,12,13) > x [1] 88 5 12 13 > x <- c(x[1:3],168,x[4]) #插入168数字在13之前 > x [1] 88 5 12 168 13 > 2.

R语言编程艺术_第六章_因子和表

一.因子与水平 1.简单直接的认识因子和水平 因子可以简单的理解为包含了更多信息的向量.即因子=向量 + 水平.(当然实际上它们内部机理不同).水平是对于向量中不同值的记录,以下面代码为例: > x <- c(5, 12, 13, 12) > x [1] 5 12 13 12 > xf <- factor(x) > xf [1] 5 12 13 12 Levels: 5 12 13 但是我们说到因子的长度时,则定义为数据的长度,而非水平的个数. > length(

《R语言编程艺术》中文版PDF+英文版PDF+源代码

下载:https://pan.baidu.com/s/123-dCrwFtFCvWeVM5O4b5w 中文和英文两版对比学习, 带目录书签: 配套源代码: 经典书籍,讲解详细. 原文地址:http://blog.51cto.com/3215120/2307075

《R语言实战》学习笔记fourth

又拖了好久继续写R 语言的学习笔记了啊 这次到了基本数据管理了,众所周知数据准备是数据分析的最重要的前提 书本是从一个例子开始本章的内容的,例子是一个类似调查问卷的 然后把回答标为从1到5,再进行分析(这让我想到了自学SPSS 的时候啊) > manager <- c(1, 2, 3, 4, 5) > date <- c("10/24/08", "10/28/08", "10/1/08", "10/12/08&q

《R语言实战》学习笔记seventh

由于在准备软考中级数据库系统工程师外加巩固SQL Server 2012,所以拖了好久一直没继续学R 下去 所以今天重开R 的战事 这次是关于基本统计分析的内容,即关于用于生成基本的描述性统计量和推断统计量的R 函数 首先,将着眼于定量变量的位置和尺度的衡量方式 然后将是生成类别型变量的频数表和列联表的方法(以及连带的卡方检验) 接下来将考察连续型和有序型变量相关系数的多种形式 最后转而通过参数检验(t检验)和非参数检验(Mann-Whitney U检验.Kruskal-Wallis检验)方法研