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
、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)
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/)
```
如果你想做 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)始正題。
細(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ū)域。分別的功能是
可以看出,綜合的功能是比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è)置的。
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ù)解釋如下:
我們可以看到,在矩陣?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)單的解釋。
注意:我還沒(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)始的地方看看?
再次強(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,我們一起飛!
*請(qǐng)認(rèn)真填寫(xiě)需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。