cam*_*rms 1 r function try-catch
我一直在使用启发式安卓博客中的这个很棒的代码
您可以在哪里地理定位IP地址.我希望能够通过大型(24867 IP)IP地址向量运行该功能.问题是大多数IP地址都会返回以下错误:
Error in file(con, "r") : cannot open the connection
In addition: Warning message:
In file(con, "r") : cannot open: HTTP status was '404 Not Found'
Run Code Online (Sandbox Code Playgroud)
我假设这是因为无法跟踪IP地址.
我想创建一个IP地址向量的子集,它将为我提供位置.我想我需要编写另一个函数将IP地址放入工作IP地址的新向量中,或者放入错误IP地址的不同向量中.
我想我还需要使用try或tryCatch功能?
我是编程新手,所以我不知道如何编写函数.我在网上查看了一些例子,但无法弄明白.任何意见,将不胜感激.
编辑: 感谢@Thomas指出我正确的道路......
我使用函数is.error来确定是否try()会给我一个错误.返回逻辑向量:
is.error <- function(x) inherits(x, "try-error")
Run Code Online (Sandbox Code Playgroud)
尝试使用 lapply()
> is.error(
+ try(
+ lapply(X = ls_IPaddresses, FUN = freegeoip)
+ )
+ )
Error in file(con, "r") : cannot open the connection
[1] TRUE
Run Code Online (Sandbox Code Playgroud)
ls_IPaddresses的长度是24867,所以我想要一个长度相同的逻辑向量,这样我就可以将逻辑向量与ls_IPaddresses进行子集化.
这应该工作:
ips <- c('184.26.100.110', '555.22.333.111')
try.ip <- function(ip) suppressWarnings(try(freegeoip(ip), silent = TRUE))
outcomes <- lapply(ips, try.ip)
is.ok <- function(x) !inherits(x, "try-error")
sapply(outcomes, is.ok)
# [1] TRUE FALSE
Run Code Online (Sandbox Code Playgroud)