Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 久久免费视频网站,国产在线日韩在线,91视频在线看

          整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          初始R語(yǔ)言

          初始R語(yǔ)言

          、R 語(yǔ)言是什么?

          R 語(yǔ)言是一個(gè)專門(mén)為統(tǒng)計(jì)而開(kāi)發(fā)出來(lái)的一個(gè)計(jì)算機(jī)編程語(yǔ)言,它是一種解釋性型的面向數(shù)學(xué)理論研究工作者的語(yǔ)言。類似于MATLAB,他在語(yǔ)言層面提供了更加豐富的數(shù)據(jù)結(jié)構(gòu),且能夠十分方便地輸出文字和圖形信息,所以廣泛應(yīng)用于數(shù)據(jù)分析,尤其是統(tǒng)計(jì)學(xué)領(lǐng)域。

          我們使用R 語(yǔ)言一般都會(huì)搭配 Rstudio 使用(它是一款 R 語(yǔ)言的操作界面,具有代碼調(diào)試、可視化等功能)

          Rstudio操作界面介紹

          2、R 語(yǔ)言能做什么?

          現(xiàn)在的 R 語(yǔ)言可以做 統(tǒng)計(jì)分析、數(shù)據(jù)可視化、機(jī)器學(xué)習(xí)(包括深度學(xué)習(xí))。

          —— R 語(yǔ)言的系統(tǒng)學(xué)習(xí)可以參考[R 語(yǔ)言教程](https://www.math.pku.edu.cn/teachers/lidf/docs/Rbook/html/_Rbook/intro.html#intro-hist-char)

          • 統(tǒng)計(jì)分析:R 的統(tǒng)計(jì)分析能力尤為突出,它內(nèi)嵌了許多實(shí)用的統(tǒng)計(jì)分析函數(shù)(比如,線性回歸等)。分析的結(jié)果也可以直接顯示在界面上。
          • 數(shù)據(jù)可視化:內(nèi)置了多個(gè)作圖函數(shù),同時(shí)還有大量的作圖函數(shù)包(package),比如,ggplot2NatureScienceCell上有大量的圖表都是使用 R 語(yǔ)言繪制的)。這些工具的存在使得 R 可以做出各種美觀漂亮的圖表(比如,熱圖、動(dòng)態(tài)統(tǒng)計(jì)圖等),而且可以保存為 jpg、png、bmp、ps、pdf、emf 等多種格式文件。

          R語(yǔ)言出的圖

          ——(關(guān)于 R 語(yǔ)言學(xué)術(shù)表格的繪制方法可以參考[《R 語(yǔ)言數(shù)據(jù)可視化之美》](https://read.douban.com/reader/ebook/130453795/))

          同時(shí)R 語(yǔ)言還能實(shí)現(xiàn)地理可視化(GIS),通過(guò)“arcgisbinding”包可以實(shí)現(xiàn)在 R 語(yǔ)言中導(dǎo)入、轉(zhuǎn)化和導(dǎo)出 ArcGis 數(shù)據(jù)集。還有專門(mén)為 R 和 ArcGis 開(kāi)發(fā)的軟件[R-ArcGis](https://r.esri.com/)

          • 機(jī)器學(xué)習(xí):得益于 R 的開(kāi)源社區(qū)(CRAN),許多的機(jī)器學(xué)習(xí)“package”被開(kāi)發(fā)出來(lái)供人們免費(fèi)使用(比如 nnet、randomForst等),可以實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò),隨機(jī)森林等**各種機(jī)器學(xué)習(xí)**模型等建模。通過(guò)與 keras(深度學(xué)習(xí)框架)的結(jié)合,使得 R 還可以實(shí)現(xiàn)深度學(xué)習(xí)建模,讓 R 的應(yīng)用范圍又更進(jìn)一步拓寬。

          ```

          如果你想做 Bayesian,只要在 R 里面調(diào)用 OpenBUGS,WinBUGS,JAGS 等這些已經(jīng)成熟的 package 來(lái)進(jìn)行貝葉斯分析。

          ```

          怎么樣R 語(yǔ)言是不是非常有用,那我們趕快學(xué)起來(lái)吧!

          下篇文章來(lái)教大家怎么利用R語(yǔ)言進(jìn)行簡(jiǎn)單 BP神經(jīng)網(wǎng)絡(luò) 建模

          R 語(yǔ)言幾乎不需要編程,大部分的操作只需要調(diào)用 package 來(lái)執(zhí)行就可以了.我們只需要了解R的基礎(chǔ)語(yǔ)法

          家好,這是從知乎《一個(gè)大學(xué)生的日常筆記》中遷移過(guò)來(lái)的R語(yǔ)言教程的第一篇。

          這一份筆記follow了兩本非常優(yōu)秀的R語(yǔ)言教材,分別是Robert I.Kabacoff的《R語(yǔ)言實(shí)戰(zhàn)》和Peter Dalgaard的《R語(yǔ)言統(tǒng)計(jì)入門(mén)》,兩本教材的思路有所不同,我會(huì)根據(jù)我自己的思路盡量降低學(xué)習(xí)門(mén)檻,綜合來(lái)寫(xiě)教程。(畢竟提高了門(mén)檻,我就不知道自己在寫(xiě)什么了……那就真的沒(méi)卵用了……)

          閱讀教程的時(shí)候我有自己的思路,看過(guò)我的LaTeX入門(mén)筆記的同學(xué)們會(huì)明白,如果我想到了一些可能會(huì)讓入門(mén)新手迷糊的地方,我會(huì)以注意:這樣的形式去標(biāo)記出來(lái),而且有的時(shí)候,可能這些小插曲更加重要,請(qǐng)不要忽略它們。

          例子大部分都是摘抄的,但是我會(huì)做一些解釋和細(xì)節(jié)上的調(diào)整,同時(shí)考慮到代碼規(guī)范的問(wèn)題,我很多例子不會(huì)提供符號(hào)可選的余地,比如"和',用于標(biāo)記字符都可以,但是代碼規(guī)范推薦使用"

          目前我已經(jīng)是準(zhǔn)大二學(xué)生,統(tǒng)計(jì)的先修課只有一門(mén)學(xué)校上的《概率論與數(shù)理統(tǒng)計(jì)》,事實(shí)上,這門(mén)課學(xué)完之后,R的大部分內(nèi)容就已經(jīng)可以上手操作了。因此我們不會(huì)在這門(mén)課程已有的理論部分下功夫去解釋。但是,礙于我自己本科生的視野,我們不會(huì)把太復(fù)雜,或者根本不可能涉及到的的內(nèi)容搬到這里,因此這對(duì)于真正的statistician,或者是統(tǒng)計(jì)學(xué)專業(yè)的大牛來(lái)說(shuō),可能最多只是一份入門(mén)筆記而已。

          不過(guò)也還是有些亮點(diǎn)的,我可能會(huì)在教程里夾雜點(diǎn)別的語(yǔ)言的新奇玩意做些互相的對(duì)比2333

          引言到此為止,下面我們開(kāi)始正題。

          目錄

          • R語(yǔ)言環(huán)境初探
          • 一些基本的素養(yǎng)和操作
            • 賦值
            • 向量
            • 索引
            • 矩陣
            • 數(shù)組
          • 小結(jié)

          R語(yǔ)言環(huán)境初探

          細(xì)心的同學(xué)可能已經(jīng)看到了封面的那個(gè)圖,那個(gè)就是我們推薦下載的R語(yǔ)言編輯器——Rstudio,但是這僅僅是個(gè)編輯器,必須下載安裝真正的R語(yǔ)言編譯器才能夠運(yùn)行。至于如何下載——百度搜索R和Rstudio關(guān)鍵字就好。那兩個(gè)玩意的圖標(biāo)大概長(zhǎng)這樣



          我們主要使用的編輯器是Rstudio,但是為了教程的完整性(integrity),這里展示一張R語(yǔ)言的打開(kāi)界面


          輸入一行命令試試?

          plot(rnorm(1000))

          (居然沒(méi)提供R語(yǔ)言的選項(xiàng)……)

          系統(tǒng)會(huì)為你畫(huà)一張圖


          這是一張含有1000個(gè)按正態(tài)分布排列的隨機(jī)數(shù)的圖。

          R的環(huán)境到此結(jié)束,下面我們回到Rstudio來(lái)看看


          我們可以看到Rstduio有四個(gè)區(qū)域。分別的功能是

          1. 左上角,是Rstudio的腳本區(qū)域(但是遠(yuǎn)不止寫(xiě)腳本那么簡(jiǎn)單,其實(shí)還可以用來(lái)寫(xiě)Rmarkdown,RNotebook等,這些是很實(shí)用的插件,但這里我們不詳談)
          2. 左下角,是命令行(command)窗口,剛才我們?cè)赗中展示的窗口就是這個(gè)。
          3. 右上角是R的目前的變量環(huán)境
          4. 右下角是R的畫(huà)圖,裝包,瀏覽文件的區(qū)域。

          可以看出,綜合的功能是比R要強(qiáng)大很多的,而且根據(jù)我們網(wǎng)站組的大佬的反應(yīng),這玩意其實(shí)是一個(gè)html……也就是說(shuō)你會(huì)JS你就可以惡搞它的界面啦

          對(duì)了,在你關(guān)掉R/Rstudio的時(shí)候,系統(tǒng)會(huì)問(wèn)你是否要保存空間映像,那個(gè)其實(shí)就是保存歷史記錄,方便以后繼續(xù)使用而設(shè)置的。

          一些基本的素養(yǎng)和操作

          R語(yǔ)言是一個(gè)統(tǒng)計(jì)語(yǔ)言。統(tǒng)計(jì)數(shù)據(jù)離不開(kāi)一個(gè)良好的用于儲(chǔ)存的結(jié)構(gòu)和標(biāo)識(shí)。我們會(huì)先從它的基本操作講起,在其中夾雜著數(shù)據(jù)類型,數(shù)據(jù)框等大量的結(jié)構(gòu)和細(xì)節(jié)。

          首先說(shuō)說(shuō)幫助文檔

          R語(yǔ)言和C++/python不一樣,R語(yǔ)言非常瑣碎,因此seek for help是必要的,但是R的official document很難懂,因此不推薦拿那個(gè)去當(dāng)作你學(xué)習(xí)的教程。我們推薦的是以下三種尋求幫助的命令

          help("function") or ?function
          help.search("function") or ??function
          example("function")

          第一個(gè)是查函數(shù)的幫助文檔,第二個(gè)是以某一個(gè)function為關(guān)鍵字搜索幫助文檔。第三個(gè)會(huì)給出某一個(gè)函數(shù)的使用示例。在對(duì)函數(shù)不熟悉的時(shí)候一定要學(xué)會(huì)使用它。

          不管是什么樣的計(jì)算機(jī)語(yǔ)言,賦值都是最基礎(chǔ)的工作。但是賦值符號(hào)不是C++里的=,而是<-,比如

          r <- 2

          注意:用=賦值是不會(huì)被編譯器報(bào)錯(cuò)的,但是由于這個(gè)語(yǔ)法不標(biāo)準(zhǔn),所以有的時(shí)候會(huì)出問(wèn)題。

          隨著賦值而來(lái)的就是數(shù)值運(yùn)算,但是我們不強(qiáng)調(diào)那種單變?cè)臄?shù)值運(yùn)算,R有個(gè)很強(qiáng)大的功能是向量化操作(當(dāng)然matlab也有)。(向量理解為一系列變量的按序組合(比如數(shù)值向量可以理解為數(shù)列)就好)比如說(shuō)給予五個(gè)人身高體重的例子,我們計(jì)算一個(gè)BMI。

          A <- c(1.84,1.74,1.65,1.58,1.81)
          B <- c(86.2,65,51.5,45,56)
          BMI <- (B/(A^2))
          BMI

          最后顯示的結(jié)果是


          確實(shí)是一個(gè)向量。

          注意:R語(yǔ)言構(gòu)造向量的方法是c(...)

          注意:如果不輸入某一個(gè)變量的名稱,R默認(rèn)是不顯示結(jié)果的,因此我最后一行又加了一個(gè)BMI變量名顯示它。

          注意:我們推薦寫(xiě)多行R代碼的時(shí)候使用腳本,之后在Rstudio中,腳本區(qū)域的右上角有三個(gè)按鈕,第一個(gè)run是逐行運(yùn)行代碼,第三個(gè)source是運(yùn)行全部代碼(但是要在下拉框選擇source with echo,否則依然顯示不了結(jié)果),大家注意回去找找看。

          注意:如果你真的點(diǎn)擊了source去運(yùn)行代碼的話,可以在command區(qū)域看到這樣的命令

          source('C:/Users/Asus/Desktop/A.R')

          拿出來(lái)說(shuō)的原因是想強(qiáng)調(diào):如果你要輸入一個(gè)文件路徑,一定要輸入正斜杠/,因?yàn)榉葱备苁?strong>轉(zhuǎn)義字符(escaped character),在""中間輸入字符,如果想讓它打印出",就可以輸入\"。

          我們回到向量這個(gè)問(wèn)題上來(lái)

          常用的R的數(shù)據(jù)類型有三種:數(shù)字,字符,邏輯真假(當(dāng)然還有個(gè)缺失值類型,我們?cè)谥髸?huì)說(shuō))。因此我們也可以創(chuàng)建字符和邏輯向量。

          關(guān)于字符向量,我們列舉下面三個(gè)例子

          c("A","B","C")
          cat(c("A","B","C"))
          cat(c("A","B","C"),'\n')

          顯示的結(jié)果如下


          哎?二和三有什么區(qū)別嗎?

          如果你在R中運(yùn)行的話,第二行的命令是默認(rèn)不換行的,所以就會(huì)出現(xiàn)

          的情況,不過(guò)在Rstudio里,這種情況得到了改善。

          注意:cat是連接+輸出的函數(shù),而c只負(fù)責(zé)連接,在例子中,cat可以消除字符串的""符號(hào)。你可以連接任何東西,包括向量。

          注意:R的向量要求內(nèi)部的所有元素?cái)?shù)據(jù)類型相同。如果通過(guò)cat/c連接兩個(gè)不同數(shù)據(jù)類型的向量,系統(tǒng)會(huì)進(jìn)行強(qiáng)制轉(zhuǎn)換。比如

          A <- c("A","B","C")
          B <- c(1,2,3)
          c(A,B)

          結(jié)果留給大家自己觀察。(這里原來(lái)出了一處錯(cuò)誤,已經(jīng)修正,謝謝

          @快走姑娘

          提醒


          和數(shù)值運(yùn)算類比的就是邏輯運(yùn)算,但是我不打算在這里先說(shuō)這些。

          伴隨著向量的就是索引,目的自然是為了取用這些元素。索引的方法是[],舉2個(gè)例子

          A <- c("A","B","C")
          A[2]
          B <- c("A"=1,"B"=2,"C"=3)
          B["B"]

          顯示的結(jié)果如下



          注意:向量?jī)?nèi)的元素是有序的,這里A[2]索引的就是第二個(gè),不是程序員認(rèn)為的第三個(gè)

          注意:第二個(gè)例子中,我們相當(dāng)于人工設(shè)置了索引(在python里,有個(gè)專門(mén)的數(shù)據(jù)結(jié)構(gòu)叫字典(dict))為"A","B","C",它們叫這些變量的名稱(name),一一對(duì)應(yīng)1,2,3。和自然索引1,2,3不同的是,這里的人工索引在查看變量的時(shí)候會(huì)顯示

          注意:索引也可以索引一個(gè)向量,也就是索引多個(gè)元素(和matlab一樣),比如說(shuō),試著運(yùn)行一下下面這個(gè)命令。

          A <- c("A","B","C")
          A[c(2,3)]

          結(jié)果留給你們自己去發(fā)現(xiàn)。

          注意:索引也可以是負(fù)索引!它不是python里“倒數(shù)第幾個(gè)”的含義,它的意思是“索引除標(biāo)記以外的所有元素”。在數(shù)據(jù)清洗中非常常見(jiàn),可以用一個(gè)例子去幫助理解

          A <- c("A","B","C")
          A[-c(2,3)]

          自己去敲敲代碼看看結(jié)果吧

          注意:你甚至可以使用索引進(jìn)行賦值,即使它已經(jīng)超出了這個(gè)向量的長(zhǎng)度,比如說(shuō)

          A[7]="D"

          那么,A這個(gè)時(shí)候第7個(gè)確實(shí)是字符D,但是原來(lái)的第4-6個(gè)呢?實(shí)際上它們是缺失值。也就是NA。至于缺失值是什么樣的數(shù)據(jù)類型,這會(huì)在之后提到。

          注意:對(duì)于名稱,字符串中的""要求會(huì)放寬,也就是說(shuō),你還可以這么寫(xiě)。

          B <- c(A=1,B=2,C=3)

          結(jié)果是一樣的

          對(duì)于我這種懶人來(lái)說(shuō),這可真是個(gè)福音。

          下面我們說(shuō)說(shuō)矩陣和數(shù)組

          矩陣可以理解為二維的向量。但是創(chuàng)建矩陣的參數(shù)就一下子多了很多,因此可能會(huì)稍有點(diǎn)難理解,我們用兩組例子結(jié)束這一切。

          第一組:

          S <- c(1,2,3,4,5,6,7,8,9)
          rnames <- c(1,2,3)
          cnames <- c("A","B","C")
          C=matrix(S,nrow=3,ncol=3,byrow=TRUE,dimnames=list(rnames,cnames))
          C=matrix(S,nrow=3,ncol=3,byrow=FALSE,dimnames=list(rnames,cnames))
          C=matrix(S,nrow=2,ncol=4,byrow=TRUE,dimnames=list(rnames,cnames)) 
          

          顯示的結(jié)果如下



          我改變的參數(shù)在byrow這里,它提示我們應(yīng)該按行填充還是按列填充。TRUE自然就是按行存儲(chǔ)的意思。

          Oh,第三個(gè)報(bào)錯(cuò)了,看一下報(bào)錯(cuò)信息。

          data length [9] is not a sub-multiple or multiple of the number of rows [2]數(shù)據(jù)長(zhǎng)度9不是行數(shù)2的因數(shù)或倍數(shù)

          哇哦,我有一些額外的發(fā)現(xiàn)

          報(bào)錯(cuò)信息的數(shù)字會(huì)用[]標(biāo)識(shí)出來(lái),是有意義的。同時(shí)本身也不是特別難懂。

          興奮完之后,回到命令本身,參數(shù)解釋如下:

          • 第一個(gè)是源向量。
          • 第二個(gè)是nrow和ncol參數(shù),row是行,col是列(column),代表需要組合的行數(shù)和列數(shù)。
          • 第三個(gè)是byrow參數(shù),上面已經(jīng)解釋過(guò)了。
          • 第四個(gè)是dimnames,用于標(biāo)記行名稱和列名稱。

          我們可以看到,在矩陣?yán)铮Q就非常重要了,它更接近于我們平常做數(shù)據(jù)分析時(shí)所需要使用的表。

          注意:看到那個(gè)TRUE了沒(méi),對(duì)比一下C里的true和python里的True就知道,R語(yǔ)言也是一個(gè)大小寫(xiě)敏感的語(yǔ)言。因此要注意代碼的嚴(yán)格的大小寫(xiě)。

          注意:第三,四個(gè)參數(shù)不是必需的,第三個(gè)不寫(xiě)的話,默認(rèn)是FALSE,也就是按列填充。(和TeX的語(yǔ)法差別在于,可選不可選并不能通過(guò)直觀的方式看出來(lái),需要靠人的主觀能動(dòng)性去理解)

          注意:在dimnames里有一個(gè)list函數(shù),這是為了創(chuàng)建列表,它的目的是把多個(gè)變量的集合聚合成為單個(gè)變量,這是為了方便給函數(shù)的參數(shù)提供值,傳參時(shí)會(huì)經(jīng)常用。形式上倒沒(méi)有太大的差別。

          下面是第二個(gè)例子。

          cbind(A=1:4,B=5:8,C=9:12)
          rbind(A=1:4,B=5:8,C=9:12)

          顯示的結(jié)果如下


          bind是捆綁的意思,cbind理解為“把列捆綁在一起”,所以提供的向量自然是列向量,那么對(duì)應(yīng)的名稱索引就是行索引。同樣的,rbind就是“把行捆綁在一起”。

          注意:有的人會(huì)問(wèn)[1,]和[,1]是什么?我們要強(qiáng)調(diào),這種位置上的東西不管是名稱還是數(shù)字,都是索引!但是這是矩陣的索引,對(duì)于矩陣的索引,我們可以舉幾個(gè)例子。

          A=matrix(1:24,nrow=4,ncol=6)
          A[,6]
          A[3,]
          A[3,4]
          B=A[c(2,3),c(3,4)]
          B
          dimnames(B)=list(c(1,2),c(1,2))
          B

          顯示的結(jié)果如下


          索引項(xiàng)中,第一個(gè)是行索引,第二個(gè)是列索引。同樣,你也可以給索引設(shè)置為向量。

          在敲這個(gè)代碼的時(shí)候,摸索了一個(gè)很有趣的用法。我們注意到,B依然是一個(gè)矩陣,但是使用matrix是創(chuàng)建一個(gè)矩陣,如果我要修改B這個(gè)矩陣的參數(shù)怎么辦呢?就可以使用paramater(B)=,其中paramater是在函數(shù)中的參數(shù),可以通過(guò)這種方法賦值。

          注意:1:4,5:8等等,這個(gè)是什么?根據(jù)例子可以看出,這會(huì)生成1:4的公差為1的等差數(shù)列。你不用去擔(dān)心看不懂,我會(huì)點(diǎn)出來(lái),然后告訴你,這些有趣的用法在之后的筆記中會(huì)講解到。

          接著說(shuō)數(shù)組,R中給的定義是多于2維的向量。我們拿矩陣去做對(duì)比,對(duì)數(shù)組就很好理解了。

          同樣舉個(gè)例子

          A <- c('A','B')
          B <- c(1,2,3)
          C <- c('!','@','#','
          )
          z <- array(1:24,c(2,3,4),dimnames=list(A,B,C))
          z

          顯示的結(jié)果如下


          我們可以看出,第三維是單獨(dú)被拉出來(lái)的,第一二維就是行和列。第三維我們一般稱為頁(yè)

          有了矩陣鋪墊,這個(gè)每個(gè)參數(shù)的含義就好理解多了,但我們還是做一個(gè)簡(jiǎn)單的解釋。

          1. 第一個(gè)paramater是源向量。
          2. 第二個(gè)是三維中每一維的長(zhǎng)度
          3. 第三個(gè)是每一維的名稱

          注意:我還沒(méi)有找到讓數(shù)組元素按行填充的辦法。可能本身就沒(méi)有設(shè)置吧。

          注意:在介紹matrix函數(shù)的時(shí)候,每一個(gè)參數(shù)都是paramater=...的形式,但是這里似乎不是。在R里,如果不加這樣的形式,R會(huì)按默認(rèn)的參數(shù)順序設(shè)置,如果記不住就很容易亂。使用這樣的形式可以防止這個(gè)問(wèn)題(同樣在python,C++里也可以這么做,其中python里叫已知參數(shù))當(dāng)然不是因?yàn)樗鼪](méi)有paramater,這只是寫(xiě)的人的習(xí)慣,因?yàn)檫@三個(gè)參數(shù)不容易混(性質(zhì)完全不同),所以用熟的人自然不會(huì)再想著加paramater本身。

          好的,問(wèn)題來(lái)了,如果我是小白呢?我想加paramater怎么辦?

          乖,讓你的心到最開(kāi)始的地方看看

          小結(jié)

          再次強(qiáng)調(diào),不要忽略所有注意的地方!我已經(jīng)寫(xiě)了很長(zhǎng)時(shí)間了,但是實(shí)際上回到書(shū)本,其實(shí)只是書(shū)本一二兩章的內(nèi)容的部分。還有很多有趣的東西還沒(méi)有涉及到,因此這只是基本操作總覽的第一部分。我們會(huì)在之后的筆記涉及到剩下的部分。

          下一節(jié)我們會(huì)說(shuō)函數(shù),常用函數(shù)集合,向量中的因子,排序,數(shù)據(jù)框,存儲(chǔ)與導(dǎo)入外部數(shù)據(jù)等其余的基本操作。

          感謝支持我的各位!筆芯~~

          TML 代碼約定

          很多 Web 開(kāi)發(fā)人員對(duì) HTML 的代碼規(guī)范知之甚少。

          在2000年至2010年,許多Web開(kāi)發(fā)人員從 HTML 轉(zhuǎn)換到 XHTML。

          使用 XHTML 開(kāi)發(fā)人員逐漸養(yǎng)成了比較好的 HTML 編寫(xiě)規(guī)范。

          而針對(duì)于 HTML5 ,我們應(yīng)該形成比較好的代碼規(guī)范,以下提供了幾種規(guī)范的建議。

          使用正確的文檔類型

          文檔類型聲明位于HTML文檔的第一行:

          <!DOCTYPE html>

          如果你想跟其他標(biāo)簽一樣使用小寫(xiě),可以使用以下代碼:

          <!doctype html>

          使用小寫(xiě)元素名

          HTML5 元素名可以使用大寫(xiě)和小寫(xiě)字母。

          推薦使用小寫(xiě)字母:

          • 混合了大小寫(xiě)的風(fēng)格是非常糟糕的。

          • 開(kāi)發(fā)人員通常使用小寫(xiě) (類似 XHTML)。

          • 小寫(xiě)風(fēng)格看起來(lái)更加清爽。

          • 小寫(xiě)字母容易編寫(xiě)。

          不推薦:

          <SECTION>

          <p>這是一個(gè)段落。</p>

          </SECTION>

          非常糟糕:

          <Section>

          <p>這是一個(gè)段落。</p>

          </SECTION>

          推薦:

          <section>

          <p>這是一個(gè)段落。</p>

          </section>

          關(guān)閉所有 HTML 元素

          在 HTML5 中, 你不一定要關(guān)閉所有元素 (例如 <p> 元素),但我們建議每個(gè)元素都要添加關(guān)閉標(biāo)簽。

          不推薦:

          <section>

          <p>這是一個(gè)段落。

          <p>這是一個(gè)段落。

          </section>

          推薦:

          <section>

          <p>這是一個(gè)段落。</p>

          <p>這是一個(gè)段落。</p>

          </section>

          關(guān)閉空的 HTML 元素

          在 HTML5 中, 空的 HTML 元素也不一定要關(guān)閉:

          我們可以這么寫(xiě):

          <meta charset="utf-8">

          也可以這么寫(xiě):

          <meta charset="utf-8" />

          在 XHTML 和 XML 中斜線 (/) 是必須的。

          如果你期望 XML 軟件使用你的頁(yè)面,使用這種風(fēng)格是非常好的。

          使用小寫(xiě)屬性名

          HTML5 屬性名允許使用大寫(xiě)和小寫(xiě)字母。

          我們推薦使用小寫(xiě)字母屬性名:

          • 同時(shí)使用大小寫(xiě)是非常不好的習(xí)慣。

          • 開(kāi)發(fā)人員通常使用小寫(xiě) (類似 XHTML)。

          • 小寫(xiě)風(fēng)格看起來(lái)更加清爽。

          • 小寫(xiě)字母容易編寫(xiě)。

          不推薦:

          <div CLASS="menu">

          推薦:

          <div class="menu">

          屬性值

          HTML5 屬性值可以不用引號(hào)。

          屬性值我們推薦使用引號(hào):

          • 如果屬性值含有空格需要使用引號(hào)。

          • 混合風(fēng)格不推薦的,建議統(tǒng)一風(fēng)格。

          • 屬性值使用引號(hào)易于閱讀。

          以下實(shí)例屬性值包含空格,沒(méi)有使用引號(hào),所以不能起作用:

          <table class=table striped>

          以下使用了雙引號(hào),是正確的:

          <table class="table striped">

          圖片屬性

          圖片通常使用 alt 屬性。 在圖片不能顯示時(shí),它能替代圖片顯示。

          <img src="html5.gif" alt="HTML5" style="width:128px;height:128px">

          定義好圖片的尺寸,在加載時(shí)可以預(yù)留指定空間,減少閃爍。

          <img src="html5.gif" alt="HTML5" style="width:128px;height:128px">

          空格和等號(hào)

          等號(hào)前后可以使用空格。

          <link rel="stylesheet" href="styles.css">

          但我們推薦少用空格:

          <link rel="stylesheet" href="styles.css">

          避免一行代碼過(guò)長(zhǎng)

          使用 HTML 編輯器,左右滾動(dòng)代碼是不方便的。

          每行代碼盡量少于 80 個(gè)字符。

          空行和縮進(jìn)

          不要無(wú)緣無(wú)故添加空行。

          為每個(gè)邏輯功能塊添加空行,這樣更易于閱讀。

          縮進(jìn)使用兩個(gè)空格,不建議使用 TAB。

          比較短的代碼間不要使用不必要的空行和縮進(jìn)。

          不必要的空行和縮進(jìn):

          <body>

          <h1>菜鳥(niǎo)教程</h1>

          <h2>HTML</h2>

          <p>

          菜鳥(niǎo)教程,學(xué)的不僅是技術(shù),更是夢(mèng)想。

          菜鳥(niǎo)教程,學(xué)的不僅是技術(shù),更是夢(mèng)想。

          菜鳥(niǎo)教程,學(xué)的不僅是技術(shù),更是夢(mèng)想,

          菜鳥(niǎo)教程,學(xué)的不僅是技術(shù),更是夢(mèng)想。

          </p>

          </body>

          推薦:

          <body>

          <h1>菜鳥(niǎo)教程</h1>

          <h2></h2>

          <p>菜鳥(niǎo)教程,學(xué)的不僅是技術(shù),更是夢(mèng)想。

          菜鳥(niǎo)教程,學(xué)的不僅是技術(shù),更是夢(mèng)想。

          菜鳥(niǎo)教程,學(xué)的不僅是技術(shù),更是夢(mèng)想。

          菜鳥(niǎo)教程,學(xué)的不僅是技術(shù),更是夢(mèng)想。</p>

          </body>

          表格實(shí)例:

          <table>

          <tr>

          <th>Name</th>

          <th>Description</th>

          </tr>

          <tr>

          <td>A</td>

          <td>Description of A</td>

          </tr>

          <tr>

          <td>B</td>

          <td>Description of B</td>

          </tr>

          </table>

          列表實(shí)例:

          <ol>

          <li>London</li>

          <li>Paris</li>

          <li>Tokyo</li>

          </ol>

          省略 <html> 和 <body>?

          在標(biāo)準(zhǔn) HTML5 中, <html> 和 <body> 標(biāo)簽是可以省略的。

          以下 HTML5 文檔是正確的:

          實(shí)例:

          <!DOCTYPE html>

          <head>

          <title>頁(yè)面標(biāo)題</title>

          </head>

          <h1>這是一個(gè)標(biāo)題</h1>

          <p>這是一個(gè)段落。</p>

          嘗試一下 ?

          不推薦省略 <html> 和 <body> 標(biāo)簽。

          <html> 元素是文檔的根元素,用于描述頁(yè)面的語(yǔ)言:

          <!DOCTYPE html>

          <html lang="zh">

          聲明語(yǔ)言是為了方便屏幕閱讀器及搜索引擎。

          省略 <html> 或 <body> 在 DOM 和 XML 軟件中會(huì)崩潰。

          省略 <body> 在舊版瀏覽器 (IE9)會(huì)發(fā)生錯(cuò)誤。

          省略 <head>?

          在標(biāo)準(zhǔn) HTML5 中, <head>標(biāo)簽是可以省略的。

          默認(rèn)情況下,瀏覽器會(huì)將 <body> 之前的內(nèi)容添加到一個(gè)默認(rèn)的 <head> 元素上。

          實(shí)例

          <!DOCTYPE html>

          <html>

          <title>頁(yè)面標(biāo)題</title>

          <body>

          <h1>這是一個(gè)標(biāo)題</h1>

          <p>這是一個(gè)段落。</p>

          </body>

          </html>

          嘗試一下 ?

          現(xiàn)在省略 head 標(biāo)簽還不推薦使用。

          元數(shù)據(jù)

          HTML5 中 <title> 元素是必須的,標(biāo)題名描述了頁(yè)面的主題:

          <title>菜鳥(niǎo)教程</title>

          標(biāo)題和語(yǔ)言可以讓搜索引擎很快了解你頁(yè)面的主題:

          <!DOCTYPE html>

          <html lang="zh">

          <head>

          <meta charset="UTF-8">

          <title>菜鳥(niǎo)教程</title>

          </head>

          HTML 注釋

          注釋可以寫(xiě)在 <!-- 和 --> 中:

          <!-- 這是注釋 -->

          比較長(zhǎng)的評(píng)論可以在 <!-- 和 --> 中分行寫(xiě):

          <!--

          這是一個(gè)較長(zhǎng)評(píng)論。 這是 一個(gè)較長(zhǎng)評(píng)論。這是一個(gè)較長(zhǎng)評(píng)論。

          這是 一個(gè)較長(zhǎng)評(píng)論 這是一個(gè)較長(zhǎng)評(píng)論。 這是 一個(gè)較長(zhǎng)評(píng)論。

          -->

          長(zhǎng)評(píng)論第一個(gè)字符縮進(jìn)兩個(gè)空格,更易于閱讀。

          樣式表

          樣式表使用簡(jiǎn)潔的語(yǔ)法格式 ( type 屬性不是必須的):

          <link rel="stylesheet" href="styles.css">

          短的規(guī)則可以寫(xiě)成一行:

          p.into {font-family: Verdana; font-size: 16em;}

          長(zhǎng)的規(guī)則可以寫(xiě)成多行:

          body {

          background-color: lightgrey;

          font-family: "Arial Black", Helvetica, sans-serif;

          font-size: 16em;

          color: black;

          }

          • 將左花括號(hào)與選擇器放在同一行。

          • 左花括號(hào)與選擇器間添加以空格。

          • 使用兩個(gè)空格來(lái)縮進(jìn)。

          • 冒號(hào)與屬性值之間添加已空格。

          • 逗號(hào)和符號(hào)之后使用一個(gè)空格。

          • 每個(gè)屬性與值結(jié)尾都要使用符號(hào)。

          • 只有屬性值包含空格時(shí)才使用引號(hào)。

          • 右花括號(hào)放在新的一行。

          • 每行最多 80 個(gè)字符。

          在逗號(hào)和分號(hào)后添加空格是常用的一個(gè)規(guī)則。

          在 HTML 中載入 JavaScript

          使用簡(jiǎn)潔的語(yǔ)法來(lái)載入外部的腳本文件 ( type 屬性不是必須的 ):

          <script src="myscript.js">

          使用 JavaScript 訪問(wèn) HTML 元素

          一個(gè)糟糕的 HTML 格式可能會(huì)導(dǎo)致 JavaScript 執(zhí)行錯(cuò)誤。

          以下兩個(gè) JavaScript 語(yǔ)句會(huì)輸出不同結(jié)果:

          實(shí)例

          var obj=getElementById("Demo")

          var obj=getElementById("demo")

          HTML 中 JavaScript 盡量使用相同的命名規(guī)則。

          訪問(wèn) JavaScript 代碼規(guī)范。

          使用小寫(xiě)文件名

          大多 Web 服務(wù)器 (Apache, Unix) 對(duì)大小寫(xiě)敏感: london.jpg 不能通過(guò) London.jpg 訪問(wèn)。

          其他 Web 服務(wù)器 (Microsoft, IIS) 對(duì)大小寫(xiě)不敏感: london.jpg 可以通過(guò) London.jpg 或 london.jpg 訪問(wèn)。

          你必須保持統(tǒng)一的風(fēng)格,我們建議統(tǒng)一使用小寫(xiě)的文件名。

          文件擴(kuò)展名

          HTML 文件后綴可以是 .html (或r .htm)。

          CSS 文件后綴是 .css

          JavaScript 文件后綴是 .js

          .htm 和 .html 的區(qū)別

          .htm 和 .html 的擴(kuò)展名文件本質(zhì)上是沒(méi)有區(qū)別的。瀏覽器和 Web 服務(wù)器都會(huì)把它們當(dāng)作 HTML 文件來(lái)處理。

          區(qū)別在于:

          .htm 應(yīng)用在早期 DOS 系統(tǒng),系統(tǒng)現(xiàn)在或者只能有三個(gè)字符。

          在 Unix 系統(tǒng)中后綴沒(méi)有特別限制,一般用 .html。

          技術(shù)上區(qū)別

          如果一個(gè) URL 沒(méi)有指定文件名 (如 http://www.runoob.com/css/), 服務(wù)器會(huì)返回默認(rèn)的文件名。通常默認(rèn)文件名為 index.html, index.htm, default.html, 和 default.htm。

          如果服務(wù)器只配置了 "index.html" 作為默認(rèn)文件,你必須將文件命名為 "index.html", 而不是 "index.htm"。

          但是,通常服務(wù)器可以設(shè)置多個(gè)默認(rèn)文件,你可以根據(jù)需要設(shè)置默認(rèn)文件嗎。

          不管怎樣,HTML 完整的后綴是 ".html"。

          如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!


          主站蜘蛛池模板: 亚洲一区二区三区91| 无码av不卡一区二区三区| 日韩精品无码人妻一区二区三区| 精品乱人伦一区二区| 97久久精品午夜一区二区| 国产精品久久久久久一区二区三区| 亚洲爽爽一区二区三区| 亲子乱av一区区三区40岁| 久久精品国产一区二区三区肥胖 | 91视频国产一区| 色妞AV永久一区二区国产AV| 波多野结衣精品一区二区三区 | 色国产在线视频一区| 亚洲AV美女一区二区三区 | 日产一区日产2区| 日韩在线一区二区三区免费视频| 国产自产对白一区| 亚洲福利一区二区三区| 久久se精品动漫一区二区三区| 久久无码一区二区三区少妇| 一区二区网站在线观看| 日韩AV在线不卡一区二区三区 | 国产精品电影一区二区三区| 成人精品一区二区户外勾搭野战| 无码乱人伦一区二区亚洲一| 午夜福利av无码一区二区 | 亚洲AV无码一区二区三区DV| 在线精品亚洲一区二区小说| 国产精品成人一区二区| av无码一区二区三区| 久久精品国产一区二区| 国精产品一区二区三区糖心| 国产一区二区三区在线2021 | 波多野结衣中文字幕一区| 国产一区二区在线观看视频| 国产福利一区二区| 亚洲国产精品第一区二区三区| 亚洲日本一区二区三区在线不卡| 久久精品一区二区三区中文字幕 | 中文无码AV一区二区三区| 一区二区三区影院|