我有一个具有域名列的数据框。我想通过ping他们的域名来查看存在哪个域。我可以通过以下函数获得单独的ping响应。
ping <- function(x,stderr=FALSE,stdout=FALSE,...){
pingvec <- system2("ping",x,
stderr=FALSE,
stdout=FALSE,...)
if (pingvec == 0) TRUE else FALSE
}
ping("google.com")
[1] TRUE
是否有任何R包我可以获得整个列的ping响应,其中包含数千个域名。
答案 0 :(得分:5)
使用system()
命令不是一个好主意 - 作为任何编程语言的一般规则。 main reasons是安全性和可移植性问题。
pingr
包提供了在R:
library(pingr)
URLs <- c("google.com", "yahoo.com")
sapply(URLs, ping)
# google.com yahoo.com
#[1,] 14.6 171
#[2,] 14.7 171
#[3,] 14.6 171
编辑/评论
查看函数pingr::ping()
和pingr:::ping_os()
的源代码,似乎包使用对system()
的调用。因此,我认为security concerns remain,因为操作系统功能ping
可以重新定义,以做一些完全不同且可能有害的事情。软件包似乎解决的是可移植性问题,因为根据操作系统调用了不同的方法。
答案 1 :(得分:2)
我们可以用Vectorize
换行并为多个元素做
ping1 <- Vectorize(ping)
ping1(c("yahoo.com", "google.com"))
ping1("google.com")