R 学习 DAY2(2)
参考 datacamp intermediate R course
目前为止 DAY2 学习到的内容:
1)Vectors (one dimensional array): can hold numeric, character or logical values. The elements in a vector all have the same data type.
2)Matrices (two dimensional array): can hold numeric, character or logical values. The elements in a matrix all have the same data type.
3)Data frames (two-dimensional objects): can hold numeric, character or logical values. Within a column all elements have the same data type, but different columns can be of different data type.
R lists
一个R的列表包括了各种类型的变量,并将他们放置在同一个列表当中,这些变量可以是矩阵、向量、数据集,甚至是其他的列表。
其实都可以将list 理解为一个“super data type”,你可以在里面存储任何想要的信息。
- 新建一个list
my_list <- list(my_vector, my_matrix, my_df)
给list命名,和vector 之类命名一样一样。
names(my_list) <- c("vec", "mat", "df")
my_list
# 返回如下
'''
$vec
[1] 1 2 3 4 5 6 7 8 9 10
$mat
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
$df
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
'''
另外一种命名方式,直接在定义list的时候就对其进行命名
shining_list <- list(moviename = mov, actors = act, reviews = rev)
- 从list 中获取信息
1)按照list中顺序获取。
shining_list[3]
# 第三个变量
2)检索list中变量名获取。
shining_list[["actors"]]
3)通过$
shining_list$actors
关系运算符
关系正确返回TRUE
否则FALSE
== 相等
!= 不相等
>
大于
<
小于
ps:字母多的字符串比少的大
= 大于等于
<= 小于等于
也可以进行向量的比较,向量中数据一一比较,若条件符合则返回TRUE
。
逻辑运算符
ps: 通过tail(),head() 获取数据中的某个信息。
linkedin <- c(16, 9, 13, 5, 2, 17, 14)
last <- tail(linkedin, 2)
# 获得向量中最后两个元素
start <- head(linkedin, 2)
# 获得向量中开始的两个元素
|
表示 或,只有一个条件成立就返回真
&
表示 与,必须所有条件均满足才返回真
条件语句
- if/else if/else 句
if (condition1) {
expr1
} else if (condition2) {
expr2
} else if (condition3) {
expr3
} else {
expr4
}
tips:else 和 else if 和if 的末尾花括号在同一个位置
例子
# Variables related to your last day of recordings
medium <- "LinkedIn"
num_views <- 14
# Control structure for medium
if (medium == "LinkedIn") {
print("Showing LinkedIn information")
} else if (medium == "Facebook") {
# Add code to print correct string when condition is TRUE
print("Showing Facebook information")
} else {
print("Unknown medium")
}
# Control structure for num_views
if (num_views > 15) {
print("You're popular!")
} else if (num_views <= 15 & num_views > 10) {
# Add code to print correct string when condition is TRUE
print("Your number of views is average")
} else {
print("Try to be more visible!")
}
while 循环
格式
while (condition) {
expr
}
通过break 终止 while loop
# Initialize the speed variable
speed <- 88
while (speed > 30) {
print(paste("Your speed is", speed))
# Break the while loop when speed exceeds 80
if (speed > 80 ) {
break
}
if (speed > 48) {
print("Slow down big time!")
speed <- speed - 11
} else {
print("Slow down!")
speed <- speed - 6
}
}
for loop
- for 循环的两种表示
# loop version 1
primes <- c(2, 3, 5, 7, 11, 13)
for (p in primes) {
print(p)
}
# loop version 2
primes <- c(2, 3, 5, 7, 11, 13)
for (i in 1:length(primes)) {
print(primes[i])
}
对于list 类型变量来说使用for 循环打印元素需要注意
for (i in 1:length(nyc)){
print(nyc[[i]])
}
# 需要写[[]]
# 单个[] 会打印list 中各个类型变量
#打印结果
"""
[1] 8405837
[1] "Manhattan" "Bronx" "Brooklyn" "Queens"
[5] "Staten Island"
[1] FALSE
"""
for (i in 1:length(nyc)){
print(nyc[i])
}
# 打印结果
'''
$pop
[1] 8405837
$boroughs
[1] "Manhattan" "Bronx" "Brooklyn" "Queens"
[5] "Staten Island"
$capital
[1] FALSE
'''
利用for循环遍历打印矩阵中元素
# The tic-tac-toe matrix ttt has already been defined for you
# define the double for loop
for (i in 1:nrow(ttt)) {
for (j in 1:ncol(ttt)) {
print(paste("On row", i , "and column", j, "the board contains", ttt[i, j]))
}
}
ps: paste 函数用于打印字符串与变量组合在一起。
-
break 和 next
在循环语句中可以通过break 与next 语句跳出循环。不过二者存在区别。
next:跳过循环语句中的剩余内容,直接跳到下一次循环开始。进行中的循环结束,迭代继续。
break:直接跳出循环。停止迭代,结束循环。 -
strslit() 函数
rquote <- "r's internals are irrefutably intriguing"
chars <- strsplit(rquote, split = "")[[1]]
通过 strsplit(rquote, split = ""), 可以根据split中设定的内容,将字符串内容分割为一个个独立的元素,并存储为向量格式。
ps:若去掉末尾的[[1]]
,则存储为list 格式。