R 基礎(chǔ)語(yǔ)法

一門(mén)新的語(yǔ)言學(xué)習(xí)一般是從輸出 "Hello, World!" 程序開(kāi)始,R 語(yǔ)言的 "Hello, World!" 程序代碼如下:

myString <- "Hello, World!"

print ( myString )

以上示例將字符串 "Hello, World!" 賦值給 myString 變量,然后使用 print() 函數(shù)輸出。

注意:R 語(yǔ)言賦值使用的是左箭頭 <- 符號(hào),不過(guò)一些新版本也支持等號(hào) =。

變量

R 語(yǔ)言的有效的變量名稱(chēng)由字母,數(shù)字以及點(diǎn)號(hào) . 或下劃線 _ 組成。

變量名稱(chēng)以字母或點(diǎn)開(kāi)頭。

變量名是否正確原因
var_name2.正確字符開(kāi)頭,并由字母、數(shù)字、下劃線和點(diǎn)號(hào)組成
var_name%錯(cuò)誤% 是非法字符
2var_name錯(cuò)誤不能數(shù)字開(kāi)頭

.var_name,

var.name

正確可以 . 號(hào)開(kāi)頭,但是要注意 . 號(hào)開(kāi)頭后面不能跟著數(shù)字
.2var_name錯(cuò)誤. 號(hào)開(kāi)頭后面不能跟著數(shù)字
_var_name錯(cuò)誤不能以下劃線 _ 開(kāi)頭

變量賦值

最新版本的 R 語(yǔ)言的賦值可以使用左箭頭 <-、等號(hào) = 、右箭頭 -> 賦值:

# 使用等號(hào) = 號(hào)賦值
> var.1 = c(0,1,2,3)           
> print(var.1)
[1] 0 1 2 3

# 使用左箭頭 <-賦值
> var.2 <- c("learn","R")   
> print(var.2)
[1] "learn" "R"
    
# 使用右箭頭 <- 賦值
> c(TRUE,1) -> var.3
> print(var.3)
[1] 1 1

查看已定義的變量可以使用 ls() 函數(shù):

> print(ls())
[1] "var.1" "var.2" "var.3"

刪除變量可以使用 rm() 函數(shù):

> rm(var.3)
> print(ls())
[1] "var.1" "var.2"
>

上一章節(jié)中我們已經(jīng)學(xué)會(huì)來(lái)如何安裝 R 的編程環(huán)境,接下來(lái)我們將為大家介紹 R 語(yǔ)言的交互式編程與文件腳本編程。

交互式編程

我們只需要在命令行中執(zhí)行 R 命令就可以進(jìn)入交互式的編程窗口:

R

執(zhí)行完這個(gè)命令后會(huì)調(diào)出 R 語(yǔ)言的解釋器,我們?cè)?> 符后面輸入代碼即可。

交互式命令可以通過(guò)輸入 q() 來(lái)退出:

> q()
Save workspace image? [y/n/c]: y

文件腳本

R 語(yǔ)言文件后綴為 .R。

接下來(lái)我們創(chuàng)建一個(gè) nhooo-test.R  文件:代碼如下:

nhooo-test.R  文件

myString <- "nhooo"
print ( myString )

接下來(lái)我們?cè)诿钚写翱谑褂?Rscript 來(lái)執(zhí)行該腳本:

Rscript nhooo-test.R

輸出結(jié)果如下:

[1] "nhooo"

輸入輸出

print() 輸出

print() 是 R 語(yǔ)言的輸出函數(shù)。

和其他編程語(yǔ)言一樣,R 語(yǔ)言支持?jǐn)?shù)字、字符等輸出。

輸出的語(yǔ)句十分簡(jiǎn)單:

print("nhooo")
print(123)
print(3e2)

執(zhí)行結(jié)果:

[1] "nhooo"
[1] 123
[1] 300

R 語(yǔ)言與 node.js 和 Python 一樣,是解釋型的語(yǔ)言,所以我們往往可以像使用命令行一樣使用 R 語(yǔ)言。

如果我們?cè)谝恍猩线M(jìn)輸入一個(gè)值,那么 R 也會(huì)把它直接標(biāo)準(zhǔn)化輸出:

> 5e-2
[1] 0.05

cat() 函數(shù)

如果需要輸出結(jié)果的拼接,我們可以使用 cat() 函數(shù):

> cat(1, "加", 1, "等于", 2, '\n')
1 加 1 等于 2

cat() 函數(shù)會(huì)在每?jī)蓚€(gè)拼接元素之間自動(dòng)加上空格。

輸出內(nèi)容到文件

R 語(yǔ)言輸出到文件的方法十分多樣,而且很方便。

cat() 函數(shù)支持直接輸出結(jié)果到文件:

cat("nhooo", file="/Users/nhooo/nhooo-test/r_test.txt")

這個(gè)語(yǔ)句不會(huì)在控制臺(tái)產(chǎn)生結(jié)果,而是把 "nhooo" 輸出到 "/Users/nhooo/nhooo-test/r_test.txt" 文件中去。

file 參數(shù)可以是絕對(duì)路徑或相對(duì)路徑,建議使用絕對(duì)路徑,Windows 路徑格式為 D:\\r_test.txt。

cat("nhooo", file="D:\\r_test.txt")

注意:這個(gè)操作是"覆蓋寫(xiě)入"操作,請(qǐng)謹(jǐn)慎使用,因?yàn)樗鼤?huì)將輸出文件的原有數(shù)據(jù)清除。如果想"追加寫(xiě)入",請(qǐng)不要忘記設(shè)置 append 參數(shù):

cat("GOOGLE", file="/Users/nhooo/nhooo-test/r_test.txt", append=TRUE)

執(zhí)行以上代碼后,打開(kāi) r_test.txt 文件內(nèi)容如下:

nhoooGOOGLE

sink()

sink() 函數(shù)可以把控制臺(tái)輸出的文字直接輸出到文件中去:

sink("/Users/nhooo/nhooo-test/r_test.txt")

這條語(yǔ)句執(zhí)行以后,任何控制臺(tái)上的輸出都會(huì)被寫(xiě)入到 "/Users/nhooo/nhooo-test/r_test.txt" 文件中去,控制臺(tái)將不會(huì)顯示輸出。

注意:這個(gè)操作也是"覆蓋寫(xiě)入"操作,會(huì)直接清除原有的文件內(nèi)容。

如果我們依然像保留控制臺(tái)的輸出,可以設(shè)置 split 屬性:

sink("/Users/nhooo/nhooo-test/r_test.txt", split=TRUE)

如果想取消輸出到文件,可以調(diào)用無(wú)參數(shù)的 sink :

sink()
sink("r_test.txt", split=TRUE)  # 控制臺(tái)同樣輸出
for (i in 1:5) 
    print(i)
sink()   # 取消輸出到文件

sink("r_test.txt", append=TRUE) # 控制臺(tái)不輸出,追加寫(xiě)入文件
print("nhooo")

執(zhí)行以上代碼,當(dāng)前目錄下會(huì)生存一個(gè) r_test.txt 文件,打開(kāi)文件內(nèi)容如下:

[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
[1] "nhooo"

控制臺(tái)輸出為:

[1] 1
[1] 2
[1] 3
[1] 4
[1] 5

文字輸入

可能我們會(huì)聯(lián)想到 C 語(yǔ)言中的 scanf 、Java 中的 java.util.Scanner,如果你學(xué)習(xí)過(guò) Python 可能對(duì) input() 函數(shù)更熟悉。但是 R 語(yǔ)言本身作為一種解釋型的語(yǔ)言,更類(lèi)似于一些終端腳本語(yǔ)言(比如 bash 或者 PowerShell),這些語(yǔ)言是基于命令系統(tǒng)的,本身就需要輸入和輸出且不適合開(kāi)發(fā)面向用戶(hù)的應(yīng)用程序(因?yàn)樗麄儽旧砭褪墙o最終用戶(hù)使用的)。因此 R 語(yǔ)言沒(méi)有專(zhuān)門(mén)再?gòu)目刂婆_(tái)讀取的函數(shù),文字輸入在 R 的使用中一直在進(jìn)行。

從文件讀入文字

R 語(yǔ)言中有豐富的文件讀取函數(shù),但是如果純粹的想將某個(gè)文件中的內(nèi)容讀取為字符串,可以使用 readLines 函數(shù):

readLines("/Users/nhooo/nhooo-test/r_test.txt")

執(zhí)行結(jié)果:

[1] "nhoooGOOGLE"

讀取結(jié)果是兩個(gè)字符串,分別是所讀取的文件包含的兩行內(nèi)容。

注意:所讀取的文本文件每一行 (包括最后一行) 的結(jié)束必須有換行符,否則會(huì)報(bào)錯(cuò)。

其他方式

除了文字的簡(jiǎn)單輸入輸出以外,R 還提供了很多輸入數(shù)據(jù)和輸出數(shù)據(jù)的方法,R 語(yǔ)言最方便的地方就是可以將數(shù)據(jù)結(jié)構(gòu)直接保存到文件中去,而且支持保存為 CSV、Excel 表格等形式,并且支持直接地讀取。這對(duì)于數(shù)學(xué)研究者來(lái)說(shuō)無(wú)疑是非常方便的。但是這些功能對(duì)于 R 語(yǔ)言的學(xué)習(xí)影響不大,我們將在之后的章節(jié)提到。

工作目錄

對(duì)于文件操作,我們需要設(shè)置文件的路徑,R 語(yǔ)言可以通過(guò)以下兩個(gè)行數(shù)來(lái)獲取和設(shè)置當(dāng)前的工作目錄:

  • getwd() : 獲取當(dāng)前工作目錄

  • setwd() : 設(shè)置當(dāng)前工作目錄

# 當(dāng)前工作目錄
print(getwd())

# 設(shè)置當(dāng)前工作目錄
setwd("/Users/nhooo/nhooo-test2")

# 查看當(dāng)前工作目錄
print(getwd())

執(zhí)行以上代碼輸出結(jié)果為:

[1] "/Users/nhooo/nhooo-test"
[1] "/Users/tianqixin/nhooo-test2"
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清