R语言基础语法+数据结构学习总结

R语言Outline

Basic syntax

清屏: option+command+L
赋值:

> x <- rnorm(5)  ###R中赋值不常用=号

也可以反转赋值符号:

> rnorm(5) -> x  ###与上面等价

可以使用函数c()以向量的形式输入月龄和体重数据,此函数可将其参数组合成一个向量或列表。然后用mean()、sd()和cor()函数分别获得体重的均值 和标准差,以及月龄和体重的相关度。最后使用plot()函数,从而用图形展示月龄和体重的关系,这样就可以用可视化的方式检查其中可能存在的趋势。函数q()将结束会话并允许你退出R。

> age <- c(1,3,5,2,11,9,3,9,12,3)
> weight <- c(4.4,5.3,7.2,5.2,8.5,7.3,6.0,10.4,10.2,6.1) > mean(weight)
[1] 7.06
> sd(weight)
[1] 2.077498
> cor(age,weight)
[1] 0.9075655
> plot(age,weight)
> q()
  • Hint: demo()可以显示出各种示例

R语言编程中的常见错误

有一些错误是R的初学者和经验丰富的R程序员都可能常犯的,如果程序出错了,请检查以下几方面:

  1. 使用了错误的大小写。help()、Help()和HELP()是三个不同的函数(只有第一个是 正确的)。
  2. 忘记使用必要的引号。install.packages(“gclus”)能够正常执行,然而 Install.packages(gclus)将会报错。
  3. 在函数调用时忘记使用括号。例如,要使用help()而非help。即使函数无需参数,仍 需加上()。
  4. 在Windows上,路径名中使用了\。R将反斜杠视为一个转义字符。 setwd(“c:\mydata”)会报错。正确的写法是setwd(“c:/mydata”)或 setwd(“c:\mydata”)。
  5. 使用了一个尚未载入包中的函数。函数order.clusters()包含在包gclus中。如果还 没有载入这个包就使用它,将会报错。

赋值

1.vector
a <- c(1, 2, 5, 3, 6, -2, 4)  
b <- c("one", "two", "three")  
c <- c(TRUE, TRUE, TRUE, FALSE, TRUE, FALSE)

这里,a是数值型向量,b是字符型向量,而c是逻辑型向量

2.Matrix

矩阵是一个二维数组,只是每个元素都拥有相同的模式(数值型、字符型或逻辑型)。可通 过函数matrix()创建矩阵。一般使用格式为:

myymatrix <- matrix(vector, nrow=number_of_rows, ncol=number_of_columns,
 byrow=logical_value, dimnames=list(
char_vector_rownames, char_vector_colnames))

其中vector包含了矩阵的元素,nrow和ncol用以指定行和列的维数,dimnames包含了可选 的、以字符型向量表示的行名和列名。选项byrow则表明矩阵应当按行填充(byrow=TRUE) 还是按列填充(byrow=FALSE),默认情况下按列填充。代码清单2-1中的代码演示了matrix 函数的用法。

>cells <- c(1,26,24,68)
> rnames <- c("R1","R2")
> cnames <- c("C1","C2")

> M1 <- matrix(cells,nrow=2,ncol=2,byrow=TRUE,dimnames=list(rnames,cnames))
> M1
   C1 C2
R1  1 26
R2 24 68
  • 必须注意逻辑判断语句“TRUE”必须大写
M2 <- matrix(cells,2,2,TRUE,list(rnames,cnames))
> M2
   C1 C2
R1  1 26
R2 24 68
  • 熟练以后可以简写

数组

数组(array)与矩阵类似,但是维度可以大于2。数组可通过array函数创建,形式如下:

myarray <- array(vector, dimensions, dimnames)
下表给出了一个创建三维(2x3x4)数值型数组的示例:

> dim1 <- c("A1","A2")  ###命名步骤
> dim2 <- c("B1","B2","B3")
> dim3 <- c("C1","C2","C3","C4")  
z <- array(1:24,c(2,3,4),dimnames=list(dim1, dim2, dim3))  ###数组赋值
> z
, , C1

   B1 B2 B3
A1  1  3  5
A2  2  4  6

, , C2

   B1 B2 B3
A1  7  9 11
A2  8 10 12

, , C3

   B1 B2 B3
A1 13 15 17
A2 14 16 18

, , C4

   B1 B2 B3
A1 19 21 23
A2 20 22 24

从数组中选取元素的方式与矩阵相同。上例中,元素 z[1,2,3]为15。

数据框

数据框可通过函数data.frame()创建:
mydata <- data.frame(col1, col2, col3,...)
其中的列向量col1、col2、col3等可为任何类型(如字符型、数值型或逻辑型)。

> patientID <- c(1,2,3,4)
> age <- c(25,34,28,52)
> diabetes <- c("Type1","Type2","Type1","Type1")
> status <- c("Poor","Improved","Excellent","Poor")
> patientdata <- data.frame(patientID, age, diabetes, status)
> patientdata
  patientID age diabetes    status
1         1  25    Type1      Poor
2         2  34    Type2  Improved
3         3  28    Type1 Excellent
4         4  52    Type1      Poor

选取数据框元素的方式

  • attach() & with()函数

函数attach()可将数据框添加到R的搜索路径中。R在遇到一个变量名以后,将检查搜索路 径中的数据框。

summary(mtcars$mpg)
plot(mtcars$mpg, mtcars$disp)
plot(mtcars$mpg, mtcars$wt)

可以用attach写成:

attach(mtcars)
  summary(mpg)
  plot(mpg, disp)
  plot(mpg, wt)
detach(mtcars)

*函数attach()和detach()最好在你分析一个单独的 数据框,并且不太可能有多个同名对象时使用。否则会出现问题。
另一种方式是使用函数with():

 with(mtcars, {
   
      print(summary(mpg))
      plot(mpg, disp)
      plot(mpg, wt)
})

函数with()的局限性在于,赋值仅在此函数的括号内生效:

> with(mtcars, {
   
	stats <- summary(mpg)  
	stats
  })
 Min. 1st Qu. Median Mean 3rd Qu. Max.
10.40 15.43 19.20 20.09 22.80 33.90 
> stats
Error: object 'stats' not found

如果你需要创建在with()结构以外存在的对象,使用特殊赋值符<<-替代标准赋值符(<-)
即可,它可将对象保存到with()之外的全局环境中。

因子

函数**factor()**以一个整数向量的形式存储类别值:
举例来说,假设有向量:

diabetes <- c("Type1", "Type2", "Type1", "Type1")

语句diabetes <- factor(diabetes)将此向量存储为(1, 2, 1, 1),并在内部将其关联为 1=Type1和2=Type2(具体赋值根据字母顺序而定)。
针对向量diabetes进行的任何分析都会将其作为名义型变量对待.
要表示有序型变量,需要为函数factor()指定参数ordered=TRUE。给定向量:

status <- c("Poor", "Improved", "Excellent", "Poor")

语句status <- factor(status, ordered=TRUE)会将向量编码为(3, 2, 1, 3),并在内部将这些值关联为1=Excellent、2=Improved以及3=Poor。
另外,针对此向量进行的任何分析都会将 其作为有序型变量对待.

对于字符型向量,因子的水平默认依字母顺序创建。这对于因子status是有意义的,因为 “Excellent”“Improved”“Poor”的排序方式恰好与逻辑顺序相一致。如果“Poor”被编码为 “Ailing”,会有问题,因为顺序将为“Ailing”“Excellent”“Improved”。
可以通过指定levels选项来覆盖默认排序:

status <- factor(status, order=TRUE,
       levels=c("Poor", "Improved", "Excellent"))

各水平的赋值将为1=Poor、2=Improved、3=Excellent

summary()显示连续型变量age的最小值、最大值、均值和各四分位数;并显示类别型变量的频数值。

1. Basics

rm(list=ls())
getwd()
setwd()

2. Matrix

cell <- c(seq(1,25))
rname <- paste(‘row’,1:5)
cname <- paste(‘col’,1:5)
mymatrix <- matrix(cell,5,5,byrow=T,list(rname,cname))

2.1 添加行列

Col_Sum <- apply(mymatrix,1,sum)
Col_Mean <- apply(mymatrix,1,mean)
cbind(mymatrix,Col_Sum,Col_Mean)

3. Dataframe

3.1 从已有表中创建

library(‘MASS’)
varname <- c(‘crim’,‘age’,‘lstat’,‘medv’)
mydataframe <- Boston[varname]
head(mydataframe)

3.2 添加行或者列

mydataframe <- cbind(mydataframe,‘rad’=Boston$rad)
head(mydataframe)
str(mydataframe)
colnames(mydataframe)



<table class="dataframe">
<caption>A data.frame: 6 × 5</caption>
<thead>
	<tr><th></th><th scope=col>crim</th><th scope=col>age</th><th scope=col>lstat</th><th scope=col>medv</th><th scope=col>rad</th></tr>
	<tr><th></th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;dbl&gt;</th><th scope=col>&lt;int&gt;</th></tr>
</thead>
<tbody>
	<tr><th scope=row>1</th><td>0.00632</td><td>65.2</td><td>4.98</td><td>24.0</td><td>1</td></tr>
	<tr><th scope=row>2</th><td>0.02731</td><td>78.9</td><td>9.14</td><td>21.6</td><td>2</td></tr>
	<tr><th scope=row>3</th><td>0.02729</td><td>61.1</td><td>4.03</td><td>34.7</td><td>2</td></tr>
	<tr><th scope=row>4</th><td>0.03237</td><td>45.8</td><td>2.94</td><td>33.4</td><td>3</td></tr>
	<tr><th scope=row>5</th><td>0.06905</td><td>54.2</td><td>5.33</td><td>36.2</td><td>3</td></tr>
	<tr><th scope=row>6</th><td>0.02985</td><td>58.7</td><td>5.21</td><td>28.7</td><td>3</td></tr>
</tbody>
</table>



    'data.frame':	506 obs. of  5 variables:
     $ crim : num  0.00632 0.02731 0.02729
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值