linux重定向警告输出,R语言:选择性屏蔽输出及输出重定向

在linux中,很多命令的默认输出是stout,一般stout就是指的屏幕,而在需要的时候还可以将输出重定向,比如将输出转至文件中保存,使用>就可以实现,比如:

ls ~ > content.txt # 将Home文件夹下的文件名列表保存至content.txt中

而且linux的输出还可以细分为标准输出和标准错误输出,分别使用1和2来表示。

123 2> test.txt # linux下123是非法命令,所以正常情况下,屏幕会提示"123: command not found",但是错误输出重定向之后,警示信息会在test.txt中保存123 1> test.txt # 如果重定向的是1,就会发现错误信息依然打印到屏幕上#123: command not found

R中的输出类型

类似的,R中的输出也可以分为两种:”Output”与”Message”。

Output是正常输出,类似于linux的标准输出,一般是print或者潜在调用的print方法输出的结果。

Message是R中的一些错误(error)、警告(warning)及提示信息(message),恰好类似于linux中的标准错误输出。

Message在调用函数时常常会出现,一般情况下没有问题,当我们自己也要写函数时,尤其此时又使用了循环时,屏幕就会出现很多的警告、提示信息,而我们自己写的函数的警示很可能就被掩盖了,这时我们需要屏蔽或者重定向他们。

屏蔽屏幕输出

warning:使用suppressWarnings屏蔽

warning("test")#Warning message:#testsuppressWarnings( warning("test") )

message:使用suppressMessages屏蔽

message("ABC", "DEF")#ABCDEFsuppressMessages( message("ABC", "DEF") )

函数返回对象:使用invisible

# 尤其是在使用lapply的时候,如果不需要返回值,那么invisible很好用# R中有一些操作:打印或保存文件是不需要返回值的# 如下可以看到,打印完内容后,函数又返回给lapply一个列表,然后再次打印一遍:library(tidyverse)file_name % invisible()#或者 lapply(file_name, print) %>% invisible()#[1] "file1.txt"#[1] "file2.txt"#[1] "file3.txt"#[1] "file4.txt"#[1] "file5.txt"

由于上述这种迭代方式还是挺普遍的,所以purrr中有一组walk函数,专门用来做这件事情:

purrr::walk(file_name, print)#[1] "file1.txt"#[1] "file2.txt"#[1] "file3.txt"#[1] "file4.txt"#[1] "file5.txt"

然而walk函数并非总是好用的,一些比较冷门的场景还是需要lapply + invisible来实现,比如xlsx包的setColumnWidth就是如此,就不举例了。

输出重定向

R中也可以实现输出的重定向,通过sink来实现。

### sink的type参数控制对"标准输出"或者"标准错误输出"重定向## 标准输出重定向---------out 

PS:上周聊到ggplot2绘图的aes的变量传参问题,其实aes_string可以实现变量传字符串给aes函数,如下:

data(mtcars)mtcars %>% ggplot(aes(gear, mpg, group=gear)) + geom_boxplot() #正常boxplot图x % ggplot(aes(x, y, group=gear)) + geom_boxplot() #此时是无法得出想要的图的mtcars %>% ggplot(aes_string(x, y, group=x)) + geom_boxplot() #使用aes_sting即可

PSS:使用dplyr的函数进行编程,如果使用sym、expr及quo等方式是比较繁琐的(具体见上周内容),其实有更简单的方式来实现,那就是{{}}、all_of及.data,具体如何操作?

参考资料

R文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值