如何在R

时间:2016-08-21 05:40:47

标签: r

我有一个具有域名列的数据框。我想通过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响应,其中包含数千个域名。

2 个答案:

答案 0 :(得分:5)

使用system()命令不是一个好主意 - 作为任何编程语言的一般规则。 main reasons是安全性和可移植性问题。

pingr包提供了在R:

中ping远程服务器的可能性
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")