R语言中的输出及异常捕获
2021-03-08 02:29
标签:enter img 资料 就会 它的 没有 lua bin mes 详细请参考:Linux中标准输出和标准错误的重导向 print()是我们最为常用的输出形式,使用也非常方便。但是它也有一些缺点,首先它没有连接字符串的功能,如果你想讲多个字符串作为一个整体输出,那么要首先使用paste()函数将多个字符串连接成一个字符串。其次,最让人讨厌的是,每次print()输出,其前面都会有个序列号[x],如下, cat()的输出要比print()看着舒服很多,首先它可以自动以空格为分隔符,连接字符串。如下: 而且,cat()的输出内容前面没有序列号,看起来更加整洁。不过它的缺点,就是你必须要加换行符,否则所有内容就会在同一行显示。 这三种输出以标准错误的形式输出,同时它们都有自动连接字符串的功能,和paste0()的连接形式相似。 所以需要你在字符串中加上分隔符。 对一个列表list(2,1,0,-1,-2,”abc”,3,5)中的每一元素取对数,当遇到负数的时候,系统提示warning,并且返回了NaN。注意warning的信息通常在脚本运行结束的时候输出(否则你可能会错过warning的信息)。而当遇到列表中的字符串的时候,对字符串取对数直接提示了错误,并终止的程序的进行,后面列表中的元素,3和5,没有进行取对数。 如在上面的例子中,遇到字符串程序便终止了,如果我们让程序跳过这个错误,继续往下执行,该怎么办呢?这就涉及到了程序运行中异常的捕获和处理。在R中比较常用的是tryCatch()函数。 通过tryCatch()函数可以捕获一些异常情况,将异常情况处理,这样不会影响到后续程序的执行! 这时出现了“singluar fit”的提示,它的出现不影响模型的输出,查看my_df.model仍然可以看到模型拟合结果,但是singular fit的出现意味着模型过度拟合,而我并不想把这种存在问题的模型放在我的结果中,所以,要捕获message()的提示信息,然后返回NA作为结果。 R中常用到的5种输出形式,包括两种标准输出: print()和cat(), 三种标准错误输出:message()、warning()和stop()。对于三种标准错误输出,可以通过tryCatch()函数捕获程序异常情况并处理。 ===== THE END ==== 参考资料: https://stackoverflow.com/questions/36699272/why-is-message-a-better-choice-than-print-in-r-for-writing-a-package R语言中的输出及异常捕获 标签:enter img 资料 就会 它的 没有 lua bin mes 原文地址:https://blog.51cto.com/15069450/2577337
上面5中输出形式,可以分为两类:print()和cat()是以标准输出(stdout)的形式输出;而剩下的三种(messages(), warning(), stop())是以标准错误(stderr)的形式输出。这类似于Linux环境中的输出形式。
print()print("Hello")
# [1] "Hello"
cat()cat("Hello","World\n")
# Hello World
message(),warning()和stop()message("Hello","Wold")
# HelloWold
warning("Hello","Wold")
# Warning message:
# HelloWold
stop("Hello","World")
# Error: HelloWorld
三者的作用有所不同,message()主要用于程序运行中,输出一些提示信息,不影响程序的运行;warning()是提示程序运行中可能存在的一些异常,但是不会影响程序本身的运行;而stop()是程序运行出现错误的时候,终止程序的运行,并抛出错误信息。例子如下:for (i in list(2,1,0,-1,-2,"abc",3,5)){
message("Current i is: ",i)
print(log(i))
}
# Current i is: 2
# [1] 0.6931472
# Current i is: 1
# [1] 0
# Current i is: 0
# [1] -Inf
# Current i is: -1
# [1] NaN
# Current i is: -2
# [1] NaN
# Current i is: abc
# Error in log(i) : non-numeric argument to mathematical function
# In addition: Warning messages:
# 1: In log(i) : NaNs produced
# 2: In log(i) : NaNs produced
异常的捕获for (i in list(2,1,0,-1,-2,"abc",3,5)){
message("Current i is: ",i)
tryCatch(
{print(log(i))},
warning = function(w) {message("Negative values!")},
error = function(e) {message("Enter numeric value!")}
)
}
# Current i is: 2
# [1] 0.6931472
# Current i is: 1
# [1] 0
# Current i is: 0
# [1] -Inf
# Current i is: -1
# Negative values!
# Current i is: -2
# Negative values!
# Current i is: abc
# Enter numeric value!
# Current i is: 3
# [1] 1.098612
# Current i is: 5
# [1] 1.609438
同样地,message()作为一种标准错误,也可以通过tryCatch()来捕获。下面是一个真实遇到的情况。有这么一组数据,我想拟合混合线性模型,但是在这个过程中出现了提示信息:librar(lme4) # version 1.1-19
my_df
cal_lme
总结
tryCatch的使用模版:tryCatch(
{when everything is normal},
message = function(m){},
warning = function(w){},
error = function(e){}
)