R语言语法基础一

Hello world

#这里是注释
myString = "hello world"
print(myString)
[1] "hello world"

基本数据类型

print(class(TRUE)) #logical
print(class(5)) #Numeric
print(class(2L)) #Integer
print(class(2+5i)) #Complex
print(class("hello")) #Character
print(class(charToRaw("hello"))) #Raw

对象类型

vector向量,使用c函数创建

apple = c('red',"green","yellow")
print(apple)
[1] "red"    "green"  "yellow"

List列表,可以包含不同类型的元素

list1 = list(c(2,5,3),21.3,sin)
print(list1)
[[1]]
[1] 2 5 3

[[2]]
[1] 21.3

[[3]]
function (x)  .Primitive("sin")

Matrices矩阵

创建二维数据集

M = matrix(data = c('a','b','c','d','e','f'),
           nrow = 2, 
           byrow = TRUE)
print(M)
     [,1] [,2] [,3]
[1,] "a"  "b"  "c" 
[2,] "d"  "e"  "f"

Array数组

数组相比矩阵,能够具有任意数量的维度

a = array(c(1,2),dim = c(3,3,2))
print(a)
, , 1

     [,1] [,2] [,3]
[1,]    1    2    1
[2,]    2    1    2
[3,]    1    2    1

, , 2

     [,1] [,2] [,3]
[1,]    2    1    2
[2,]    1    2    1
[3,]    2    1    2

Factor因子

apple_colors = c('g','g','y','r','r','r','g')
factor_apple = factor(apple_colors)
print(factor_apple)
print(nlevels(factor_apple)) #nlevels函数是用来求level的

[1] g g y r r r g
Levels: g r y

[1] 3

DataFrame数据帧

BMI = data.frame(
    gender = c("Male","Male","Female"),
    height = c(152,171.5,165),
    weight = c(81,93,78),
    age = c(42,38,26)
)
print(BMI)

  gender height weight age
1   Male  152.0     81  42
2   Male  171.5     93  38
3 Female  165.0     78  26

变量

命名规则

变量名合法性原因
var_name2.有效有字母,数字,点和下划线
VAR_NAME%无效有字符'%'。只有点(.)和下划线允许的。
2var_name无效以数字开头
.var_name, var.name有效可以用一个点(.),但启动点(.),不应该后跟一个数字。
.2var_name无效起始点后面是数字使其无效。
_var_name无效开头_这是无效的

值得注意的是,a和a.i没有任何关系

a = 1
b = 2
c = 3
#cat函数可以连接多个(中间有空格隔开)
#print函数只能输出一个,但信息更多
cat(a,b,c)
1 2 3

ls()函数可以列出当前工作空间的变量,可以用很多方法搜索,排序(支持正则)

ls(pattern = "a.[0-9]")
[1] "a.1" "a.2"

rm()删除变量

rm(var1) #删除变量var1
rm(list = ls()) #删除一个列表的变量

运算符

算术运算

都是两个向量对齐,一一计算。如果不对齐会报warning(循环对齐),如果另一个是数字,会自动匹配

  • 加法:+
  • 减法: -
  • 乘法: *
  • 浮点数除法: /
  • 取模: %%
  • 乘除求商: %/%
  • 第二个是第一个的指数: ^

关系运算

也是两两依次比较

  • 大于:>
  • 小于:<
  • 等于:==
  • 大于等于:>=
  • 小于等于:<=
  • 不等于:!=
rm(list = ls())
v1 = c(2, 5.5, 6)
v2 = c(8, 3, 6)

v1 == v2
any(v1 < v2)
all(v1 > v2)

[1] FALSE FALSE  TRUE
[1] TRUE
[1] FALSE

逻辑运算

&,|,!就是判断0还是非0,返回布尔值向量

&&,||只考虑两个向量的首元素,返回一个TRUE或者FALSE

其他运算

a = 1:5 #产生一个序列向量
c(1,2) %in% a #依次判断元素是否包含在向量中
t(a) %*% a #说明a默认为列向量,这里求a^T * a

条件控制

If

if (TRUE)
{
    print("YES")
} else #这种写法,else不能单独起一行
{
    print("NO")        
}

#三目运算符
x = c(-1,-2,3,4)
x = ifelse(x<0, 0, x) #relu简单实现
print(x)

Switch

x = switch(
    3,
    "first",
    "second",
    "third",
    "fourth"
)
print(x)

包管理

.libPaths() #查看R语言库的位置
library() #列出已经安装的包
search() #列出当前环境中已经加载的包
install.packages("Package Name") #安装包
library(XML) #装载包到当前环境

循环

#for循环
a = 1:5
for(i in a)
    print(i)
#repeat
total = 0
repeat 
{
    total = total + 1;
    print(total);
    if (total > 6)
        break;  
}
#while
x = 1
while (x < 5)
{
    x  = x + 1
    print(x)
}

next语句代替了continue

小结

R的基本语法暂时总结到这里,下一次继续学习函数之后的部分。