Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 我怎样才能治疗“a”;“空簇”;警告,在K-means函数中?_R_Error Handling_Warnings_K Means - Fatal编程技术网

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)“捕获的警告”)
…或将警告作为错误,
尝试我得说我非常喜欢最后一个建议。多谢各位。本主题已结束。请随便回答。