新浪博客

R语言输入输出——source()&sink()

2018-06-29 13:52阅读:
1、输入 函数 source('filename') 可在当前会话中执行一个脚本,如果文件名中不包含路径,R将假设脚本存在于当前工作目录中。例如,source('script.R) 将执行包含在 script.R 文件中所有R语句。
2.输出
2.1 文本输出
函数 sink('filename') 将输出重定向到文件 'filename' 中,默认情况下,如果文件已存在,则它的内容会被覆盖。使用参数 append = TRUE 可以将文本追加到文件后,而不是覆盖它;参数 split = TRUE 可将输出同时发送到屏幕和文件中,不加参数则默认仅将结果输出到屏幕。
举个栗子:
存在一个脚本script.R, 需要将此脚本输出到 “myoutput' 这个文件中(不带后缀则存储的是R脚本,也可以存储为.pdf、.txt、.csv等格式的文件),则需要执行以下操作:
sink('myoutput', append = TRUE, split = TRUE) #此时工作目录中会出现一个名为'myoutput'的空文件
source('script.R') #输入数据,除了source, 也可以直接输入数据
sink() #以sink()结尾后,内容才真正保存到'myoutput'文件夹中
2.2 图形输出
sink() 只能定向输出文本,对图形输出不起作用。要重定向图形输出,可以使用图片中的函数:
R语言输入输出——source()&sink()

用这些函数需注意,最后需要使用 dev.off() 将输出返回到终端。
举个栗子:
还是脚本 script.R, 假设其中有图形输出,我想把图形输出到pdf文件中,同时取名为'mygraph',代码如下:
pdf('mygraph.pdf') #此时工作目录中将会生成一个名为mygraph的空白pdf文档
source('script.R')
dev.off() #此时图形才真正保存在pdf文档中
为了方便讲解,以上的两个例子把script.R执行后分别按文本和图形输出,当然,这两步是可以同时操作的:
sink('myoutput', append = TRUE, split = TRUE)
pdf('mygraph.pdf')
source('script.R')
sink()
dev.off()
执行完以上代码后,屏幕输出结果,同时文本和图形也分别存储到了文件中。
3. cat( ) 和 writeLines ( )
cat(... , file = 'myfile', append = FALSE)
cat 可以连接 ... 中的对象,并将其输出到屏幕或文件中
举个栗子:
name <- 'Bob'
cat('Hello', name, '\b.', ' Isn\'t R', '\t', 'great?', file = 'cattest.txt')
代码执行完毕后,屏幕不会输出结果,可以在工作目录中找到名为 cattest.txt 的文件,打开就可以看到结果了;同理,如果没有写 file = 'myfile' 这个参数,结果会直接输出到屏幕。
这行代码中用到了转义字符,说明一下,为换行,\t为制表符,\'为单引号,\b为退格。
请注意第二行缩进了一个空格。当cat输出连接的对象时,它会将每一个对象都用空格分开。这就是在句号之前使用转义字符 '\b' 的原因,不然,生成的结果将会是 Hello Bob .
writeLines(text, con = stdout(0, sep ='', useBytes = FALSE)
栗子:
lin <- c('Hello Bob', 'Isn\'t R great?')
writeLines(lin, con = 'lindata.txt')
结果不会显示在屏幕上,而是保存在指定的文件夹中。sep默认为换行,所以会发现每个字符变量之间会自动换行处理。

我的更多文章

下载客户端阅读体验更佳

APP专享