R 我怎样才能治疗“a”;“空簇”;警告,在K-means函数中?
我正在从R 我怎样才能治疗“a”;“空簇”;警告,在K-means函数中?,r,error-handling,warnings,k-means,R,Error Handling,Warnings,K Means,我正在从amap软件包的Kmeans功能中搜索处理警告消息的解决方案。警告消息如下所示: 空簇:尝试一组更好的初始中心 我是否可以得到一个信号,以便知道何时抛出此错误消息,然后处理问题?(例如:运行算法直到返回没有空集群) 对我来说,很难做出一个好的可复制的例子。但是,我带来了这个丑陋但实用的: library(amap) numberK = 20 ts.len = 7 time.series <- rep(sample(1:8000, numberK, replace = TRUE)
amap
软件包的Kmeans
功能中搜索处理警告消息的解决方案。警告消息如下所示:
空簇:尝试一组更好的初始中心
我是否可以得到一个信号,以便知道何时抛出此错误消息,然后处理问题?(例如:运行算法直到返回没有空集群)
对我来说,很难做出一个好的可复制的例子。但是,我带来了这个丑陋但实用的:
library(amap)
numberK = 20
ts.len = 7
time.series <- rep(sample(1:8000, numberK, replace = TRUE),ts.len)
time.series <- rep(rbind(time.series, time.series), 30)
time.series <- matrix(time.series, ncol = ts.len)
centers <- matrix( sample(1:3000, numberK*ts.len), ncol = ts.len)
Kmeans((time.series), centers = centers, iter.max = 99)
库(amap)
数字=20
ts.len=7
time.series来自?选项
(向下滚动很长一段时间以查找警告
…):
设置警告消息的处理。如果警告为负,则所有
警告被忽略。如果“警告”为零(默认),则显示警告
存储,直到顶级函数返回。如果10个或更少的警告
收到信号后,将打印一条信息,说明如何
许多人收到了信号。将创建名为last.warning的对象,并且可以
可通过功能警告打印。如果warn为1,则警告为
在它们出现时打印。如果警告为两个或两个以上,则所有警告均为
变成了错误
因此,使用tryCatch
可以指定一个warning
处理程序函数,以便在捕获警告时执行以下操作:
> tryCatch(expr = {Kmeans((time.series), centers = centers, iter.max = 99)},
warning = function(e) "Caught warning")
[1] "Caught warning"
或者,您可以通过以下方式将所有警告升级为错误:
options(warn = 2)
如文档中所述。那么
> tryCatch(expr = {Kmeans((time.series), centers = centers, iter.max = 99)},
error = function(e) "Caught error")
[1] "Caught error"
虽然许多人似乎更喜欢tryCatch
,但我经常喜欢try
的明确性,如果我想在运行表达式后执行某种if…else
块,我会觉得更容易:
options(warn = 2)
attempt <- try(expr = {Kmeans((time.series), centers = centers, iter.max = 99)},silent = TRUE)
> class(attempt)
[1] "try-error"
选项(警告=2)
尝试类(尝试)
[1] “尝试错误”
因此,您可以在if
语句中检查类(尝试)
(首选方法是检查继承(尝试,“尝试错误”)
),并相应地执行操作。一个选项:选项(warn=2);tryCatch(expr={Kmeans((time.series),centers=centers,iter.max=99)},error=function(e)“捕获的错误”)
。或使用默认选项:tryCatch(expr={Kmeans((time.series),centers=centers,iter.max=99)},warning=function(e)“捕获的警告”)
…或将警告作为错误,尝试我得说我非常喜欢最后一个建议。多谢各位。本主题已结束。请随便回答。