R語言 輸入輸出

2021-06-28 09:33:44 字數 3265 閱讀 7068

**

在s互動執行時要顯示某乙個物件的值只要鍵入其名字即可,如:

> x <- 1:10

> x

[1] 1 2 3 4 5 6 7 8 9 10

這實際上是呼叫了print()函式,即print(x)。在非互動執行(程式)中應使用print()來輸出。print()函式可以帶乙個digits=引數指定每個數輸出的有效數字位數,可以帶乙個quote=引數指定字串輸出時是否帶兩邊的撇號,可以帶乙個print.gap=引數指定矩陣或陣列輸出時列之間的間距。

print()函式是乙個通用函式,即它對不同的自變數有不同的反應。對各種特殊物件如陣列、模型結果等都可以規定print的輸出格式。

cat()函式也用來輸出,但它可以把多個引數連線起來再輸出(具有paste()的功能)。例如:

> cat("i = ", i, "\n")

注意使用cat()時要自己加上換行符"\n"。它把各項轉換成字串,中間隔以空格連線起來,然後顯示。如果要使用自定義的分隔符,可以用sep=引數,例如:

> cat(c("ab", "c"), c("e", "f"), "\n", sep="")

abcdef

cat()還可以指定乙個引數file=給乙個檔名,可以把結果寫到指定的檔案中,如:
> cat("i = ", 1, "\n", file="c:/work/result.txt")
cat()函式和print()都不具有很強的自定義格式功能,為此可以使用cat()與format()函式配合實現。format()函式為乙個數值向量找到一種共同的顯示格式然後把向量轉換為字元型。例如:

> format(c(1, 100, 10000))

[1] " 1" " 100" "10000"

s-plus中的format()函式功能較強,具有較多的控制引數,請參見幫助。r中目前format()函式功能仍較弱,但r有乙個formatc函式可以提供類似c語言的printf格式功能。formatc對輸入向量的每乙個元素單獨進行格式轉換而不生成統一格式,例如:

> formatc(c(1, 10000))

[1] "1" "1e+004"

在formatc()函式中可以用format=引數指定c格式型別,如"d"(整數),"f"'(定點實數),"e"(科學記數法),"e", "g"(選擇位數較少的輸出格式),"g", "fg"(定點實數但用digits指定有效位數),"s"(字串)。可以用width指定輸出寬度,用digits指定有效位數(格式為e,e,g,g,fg時)或小數點後位數(格式為f)時。可以用flag引數指定乙個輸出選項字串,字串中有"-"表示輸出左對齊,有"0"表示左空白用0填充,有"+"表示要輸出正負號,等等。例如,我們有乙個矩陣da中儲存了三個日期的年、月、日:

> da

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

[1,] 99 1 3

[2,] 96 11 9

[3,] 65 5 18

+ cat(formatc(r[1], format='d', width=2, flag='0'), '-',

+ formatc(r[2], format='d', width=2, flag='0'), '-',

+ formatc(r[3], format='d', width=2, flag='0'), '\n', sep=''))

99-01-03

96-11-09

65-05-18

null

> ls()

> d

> sink()

呼叫無引數的sink()把輸出恢復到互動視窗。

為了從外部檔案讀入乙個數值型向量,s提供了scan()函式。如果指定了file引數(也是第一引數),則從指定檔案讀入,預設情況下讀入乙個數值向量,檔案中各資料以空白分隔,讀到檔案尾為止。例如:

> cat(1:12, '\n', file='c:/work/result.txt')

> x <- scan('c:/work/result.txt')

如果檔案中是乙個用空白分隔的矩陣(或陣列),我們可以先用scan()把它讀入到乙個向量然後用matrix()函式(或array()函式)轉換。如:

> y <- matrix(scan('c:/work/result.txt'), ncol=3, byrow=t)

實際上,scan()也能夠讀入乙個多列的**,只要用what引數指定乙個列表,則列表每項的型別為需要讀取的型別。用skip引數可以跳過檔案的開始若干行不讀。用sep引數可以指定資料間的分隔符。詳見幫助。

scan()不指定讀取檔名時是互動讀入,讀入時用乙個空行結束。

如果要讀取乙個資料框,s提供了乙個read.table()函式。它只要給出乙個檔名,就可以把檔案中用空白分隔的**資料每行讀入為資料框的一行。比如,檔案c:\work\d.txt中內容如下:

zhou  15  3

"li ming" 9 李明

zhang 10.2 wang

用read.table讀入:

> x <- read.table('c:/work/d.txt', as.is=t)

> x

v1 v2 v3

1 zhou 15 3

2 li ming 9 李明

3 zhang 10.2 wang

讀入結果為資料框。函式可以自動識別表列是數值型還是字元型,並在預設情況下把字元型資料轉換為因子(加上as.is=t可以保留字元型不轉換)。函式自動為資料框變數指定「v1」、「v2」這樣的變數名,指定「1」、「2」這樣的行名。可以用col.names引數指定乙個字元型向量作為資料框的變數名,用row.names引數指定乙個字元型向量作為資料框的行名。

read.table()可以讀入帶有表頭的檔案,只要加上header=true引數即可。可以用sep引數指定錶行各項的分隔符。例如,為了讀入如下帶有表頭的逗號分隔檔案c:\work\d.csv:

name,score, cn

zhou,15,3

li ming, 9, 李明

zhang, 10.2, wang

使用如下語句:

> x <- read.table('c:/ldf/tmp.txt', header=t, sep=',')

> x

name score cn

1 zhou 15.0 3

2 li ming 9.0 李明

3 zhang 10.2 wang

其它一些用法見幫助。

R提高篇 一 輸入輸出

目錄 文字輸出 split true 可將輸出同時傳送到螢幕和輸出檔案中 sink 結束重定向 圖形輸出 資料輸入 資料框輸出 文字匯入 匯入時預設把字元變數轉化為因子,若不希望這樣,則設定 stringasfactors false 若對匯入的每一列指定乙個類,可使用 colclasses 如 c...

C語言輸入輸出

i o函式 printf 和scanf 輸出程式 函式的呼叫是在c語言標頭檔案 stdio.h 中包含這些像printf 輸入輸出 printf 一般形式如下 printf 格式化字串 輸出參數列 鍵盤輸入函式 顯示器輸出函式printf putchar puts 磁碟檔案操作creatnew 建立...

C語言 輸入 輸出

當我們提到輸入時,這意味著要向程式填充一些資料。輸入可以是以檔案的形式或從命令列中進行。c 語言提供了一系列內建的函式來讀取給定的輸入,並根據需要填充到程式中。當我們提到輸出時,這意味著要在螢幕上 印表機上或任意檔案中顯示一些資料。c 語言提供了一系列內建的函式來輸出資料到計算機螢幕上和儲存資料到文...