R 学习 DAY2(2)

2020-04-30  本文已影响0人  Peng_001

参考 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”,你可以在里面存储任何想要的信息。

  1. 新建一个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)
  1. 从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)
# 获得向量中开始的两个元素

| 表示 或,只有一个条件成立就返回真
&表示 与,必须所有条件均满足才返回真

条件语句

  1. 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

  1. 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 函数用于打印字符串与变量组合在一起。

  1. break 和 next
    在循环语句中可以通过break 与next 语句跳出循环。不过二者存在区别。
    next:跳过循环语句中的剩余内容,直接跳到下一次循环开始。进行中的循环结束,迭代继续。
    break:直接跳出循环。停止迭代,结束循环。

  2. strslit() 函数

rquote <- "r's internals are irrefutably intriguing"
chars <- strsplit(rquote, split = "")[[1]]

通过 strsplit(rquote, split = ""), 可以根据split中设定的内容,将字符串内容分割为一个个独立的元素,并存储为向量格式。
ps:若去掉末尾的[[1]],则存储为list 格式。

上一篇下一篇

猜你喜欢

热点阅读