#數據結構
#R對象:object,它是指可以賦予給變量的任何事物好芭,包括常量燃箭、數據結構、函數舍败,甚至圖形招狸。
#對象都擁有某種模式,描述了此對象是如何存儲的邻薯,以及某個類裙戏。
#用來存儲數據的對象類型
#1.向量,標量
#2.矩陣
#3.數組
#4.列表
#5.數據框
#6.因子
#7.時間序列
#它們在存儲數據的類型厕诡、創(chuàng)建方式累榜、結構復雜度以及用于定義和訪問其中個別元素等等方面均有所不同
#向量
#vector,R中最重要的一個概念,是構成其他數據結構的基礎木人。
#R中的向量概念與數學中向量是不同的信柿,類似于數學上的集合的概念,由一個或多個元素所構成醒第。
#是用于存儲數值型渔嚷、字符型或邏輯型數據的一維數組。
#用函數c來創(chuàng)建向量稠曼。
#c代表concatenate連接形病,也可以理解為收集collect,或者合并combine霞幅。
#向量的數據結構
euro #歐元匯率漠吻,長度為11,每個元素都有命名
landmasses #48個陸地的面積司恳,每個都有命名
precip #長度為70的命名向量
rivers #北美141條河流長度
state.abb #美國50個州的雙字母縮寫
state.area #美國50個州的面積
state.name #美國50個州的全稱
#定義x變量
#<-? 賦值操作符
#c? ? 函數
#,? 不同元素之間用,來分隔
x<-c(1,2,3,4,5)
#這就定義好了一個向量途乃,也可以說是對象x
#接下來在終端直接敲x就可以輸出這個變量的內容
x
#這里是自動調用了print函數來打印變量的內容
print(x)
#print可以省略
#向量中的元素可以是數值型、字符串型或者邏輯型
y<-c("one","two","three")
y
##字符串一定要加""扔傅,新手常見錯誤耍共,不加引號會提示對象找不到
##搜索包的時候烫饼,包的名字一定要加""
#因為R中如果不加"",就會把這些字符串當做對象
#例如變量或者函數试读,去整個軟件中搜索杠纵,如果搜索不到,就會提示對象找不到
#ex
#不加引號R會把字符串當內部人钩骇,加引號表示字符串是外部的
#字符串之間有空格或逗號
y<-c("one","two",hello,wold)
y<-c("one","two","hello,wold")
y
#定義一個變量z為邏輯型比藻,邏輯型向量包括true或false,用于條件判斷中
#在R中倘屹,用到邏輯型向量全部大寫银亲,也可以簡寫成T或F
#邏輯型向量不用加引號
z<-c(TRUE,T,F)
z
#但不能使用首字母大寫模式
z<-c(True,T,F)
#這種模式就不是邏輯型了,會被當成字符串唐瀑,必須加上引號
#可以用一些快捷方式來構建向量
#? :? 可以用來構建等差數列
c(1:100)
#使用seq函數調整等差差值
#參數from為起始值
#參數to為終止值
seq(from=1,to=100)
#生成從1到100的向量
#參數by設置等差值
seq(from=1,to=100,by=2)
#參數length.out用來控制輸出的個數
seq(from=1,to=100,length.out=10)
#rep函數生成重復序列
?rep
rep(2,5)
rep(x,5)
rep(x,each=5)
rep(x,each=5,times=2)
#向量特點:所有的元素必須是同一類型
#都是數字型群凶,都是字符串型、邏輯型哄辣,不能混合
a<-c(1,2,"one")
a
#敲一下a请梢,打印出內容
#所有的元素都帶上""
#說明數值型被轉換成字符串型變量了
#可以使用mode或者type.out查看向量類型
mode(a)
#顯示為"character"#字符串型
#"logical"邏輯型
#為什么向量必須是同一類型呢
#因為只有同一類型才可以進行計算,不是同一類型很難處理
#如果向量中只有一個元素力穗,也可以不加c函數毅弧,直接賦值
a=2
b=3
c="Hello,World"
d=TRUE
#這種向量也稱為 標量
#這和其他編程語言類似
#例如:Per里面的最基礎的就是標量,只用來存儲一個值
a,b,c,d
#Error: unexpected ',' in "a,"
a;b;c;d;
#向量是R與其它編程語言非常大的一個不同
#其他編程語言中沒有向量
#R中最基礎的數據結構是一個集合当窗,而不是一個標量
#這種被稱為向量化編程
#為什么R中要是用向量化編程呢够坐?
#因為R是統(tǒng)計軟件,它的作用是統(tǒng)計學家崖面,而不是計算機科學家
#向量化編程有非常多的好處
#例:兩個集合
x<-c(1,2,3,4,5)
y<-c(6,7,8,9,10)
#現將x集合中每個元素擴大一倍条获,與y集合對應的數值相加
#一般編程語言這樣處理
1*2+6
#向量化編程這樣處理
x*2+y
#這樣就出來結果了既们,非常方便
#矩陣運算蒋失,用循環(huán)來編程四敞,就更復雜了;向量化編程還是非常方便
#向量化編程是R的精髓所在简识,也是R與其他編程語言最大的不同
#向量化編程在統(tǒng)計中具有非常高的效率
#最大的優(yōu)勢是避免使用循環(huán)
#從x向量中取出大于3的值
# x(x>3)
#Error in x(x > 3) : could not find function "x"
x[x>3]
#一下就完成了赶掖,不需要使用循環(huán)一個一個來判斷
#始終不能忘記R是統(tǒng)計學軟件,處理的就是一大堆的數字七扰,不是單獨的幾個數字
#所以最基礎的數據結構就是向量奢赂,而不是幾個數字,所以要采用向量化的編程
#在R中會有大量地方可以用到向量
rep(x,c(2,4,6,1,3))
#用來分別控制x向量中每個元素循環(huán)的次數
#這樣就按照向量中的設定來進行重復颈走,非常高效