R提供多个命令来连接键盘和显示器。
►使用scan()函数
可以使用scan()从文件中读取或者用键盘输入一个向量,它可以是数值型或字符型向量。再增加一些操作,甚至可以读取数据来形成一个列表。
scan()可以快速的一次读取整个文件。
scan(file = "", what = double(0), nmax = -1, n = -1, sep = "",quote = if (sep=="\n") "" else "'\"", dec = ".",skip = 0, nlines = 0, na.strings = "NA",flush = FALSE, fill = FALSE, strip.white = FALSE, quiet = FALSE,blank.lines.skip = TRUE, multi.line = TRUE, comment.char = "")
函数scan()缺省选项及说明
选项值 | 说明 |
file | 文件名在(""之内),可能包含它的路径,或者使用一个URL链接。如果file="",数据从键盘输入(使用一个空白行终止输入) |
what | 指定数据的类型(缺省值为数值型) |
nmax | 要读取数据的最大数量,如果what是一个列表,nmax则是可以读取的行数(在缺省情况下,scan读取到文件最末端为止的所有数据) |
n | 要读取数据的最大数量(在缺省情况下,没有限制) |
sep | 文件中的字段分隔符 |
quote | 用来包围字符型值 |
dec | 用来表示小数点的字符 |
skip | 在读取数据前跳过的行数 |
nlines | 要读取的行数 |
na.string | 表示确实数据的字符串(转化为NA) |
flush | 一个逻辑值,如果为TRUE,当读取完指定列数后scan将转到下一行(这样就允许用户在数据文件中添加注释,即添加在指定列数后) |
fill | 如果为TRUE,且非所有的行中变量数目相同,则用空白填补 |
strip.white | 在sep已制定的情况下,如果为TRUE,则删除字符型变量前后多余的空格 |
quiet | 一个逻辑值,如果为FALSE,scan显示一行信息说明哪些字段被读取 |
blank.lines.skip | 如果为TRUE,忽略空白行 |
multi.line | 当what是一个列表时,若为FALSE则表示列表中每个个体的所有变量都在同一行中 |
comment.char | 指定注释开始字符,一行中以这个字符开头的部分将被忽略(缺少禁用此选项) |
> scan( "D:/RCodes/z1.txt" )
Read 4 items
[1] 123 4 5 6
> scan( "D:/RCodes/z2.txt" )
Read 4 items
[1] 123.0 4.2 5.0 6.0
> scan( "D:/RCodes/z3.txt" )
Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :
scan() expected 'a real', got 'abc'
> scan( "D:/RCodes/z3.txt", what="" )
Read 4 items
[1] "abc" "de" "f" "g"
第一次调用,得到了四个整数组成的向量(仍然是数值型)。
第二次调用,因为有一个数字不是整数,所以其他数也以浮点数的形式存储。
第三次调用,出现了一个错误提示。scan()函数有一个可选参数what用来设定变量的模式(mode),默认为double模式。由于文件z3.txt的内容不是数值,所以出现错误,再尝试一次,设置what=””,此举把字符赋值给what,表明我们想要字符模式(也可以设置what为任何字符串)。
最典型的用法是把scan()的返回值赋给一个变量。
> v <- scan( "D:/RCodes/z1.txt" )
Read 4 items
> v
[1] 123 4 5 6
默认情况下,scan()假定向量的各项之间是以“空白字符(whitespace)”作为分隔,空白字符包括空格、回车/换行符和水平制表符。如果是其他分隔符,可以用可选参数sep来设置。例如,可以把sep设置为换行符,把每一行当作一个字符串读入。
> scan( "D:/RCodes/z1.txt", what="", sep="\n" )
Read 3 items
[1] "123" "4 5" "6"
也可以用scan()函数从键盘读取数据,只需要把文件名设定为一个空字符串,然后用键盘录入数据。
> v <- scan( "" )
1: 12 5 3
4: 3 4 6
7: 8
8:
Read 7 items
> v
[1] 12 5 3 3 4 6 8
命令行在每行行首提示的数字是下一个输入项的索引,键入一个空行表示结束输入。如果不希望scan()报告已读取的项目数,可以设置参数quiet=TRUE。
►使用readline()函数
如果想从键盘输入单行数据,用readline()函数会非常方便。
> w <- readline()
It is a R program.
> w
[1] "It is a R program."
一般来说,调用readline()时可以指定一个提示语字符串作为参数,这个参数是可选的。
> w <- readline("Please type your initial:")
Please type your initial:It is a R program.
> w
[1] "It is a R program."
►输出到显示器
在交互模式的顶层,你只需要简单键入变量名或者表达式,就能输出变量或表达式的值。但如果要在函数体内部打印变量或者表达式的值,就需要使用print()函数。
> x <- 1 : 5
> x
[1] 1 2 3 4 5
> print( 2 * x )
[1] 2 4 6 8 10
print()是一个泛型函数,所以其实际调用的函数依赖于所打印对象的类别。cat()比print()稍微好用一点,因为后者只可以输出一个表达式,而且输出内容带编号,这可能会造成干扰。
> print( "abc" )
[1] "abc"
> cat( "abc\n" )
abc
注:在调用cat()时需要一个行结束字符“\n”,如果没有它,下一次调用cat()函数还会在同一行输出内容。
用cat()打印的各个参数是以空格分隔的。如果不想用空格分隔,可以把sep设置为各种字符,也可以把sep设置为字符串向量。
> cat( x, "R", "abc\n" )
1 2 3 4 5 R abc
> cat( x, "R", "abc\n", sep="" )
12345Rabc
> cat( x, "R", "abc\n", sep="\n" )
12345Rabc
> cat( x, sep=c( ".", " ", "\n", "." ) )
1.2 34.5