R:连接键盘与显示器(输入和输出)


    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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值