我有一个有域名列的dataframe。我想看看哪个域名存在,点击他们的域名。我可以从下面的函数中得到一个独立的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响应,其中有数千个域名。
发布于 2016-08-21 06:02:59
使用system()命令不是一个好主意--在任何编程语言中都是这样。主要原因是安全性和可移植性问题。
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()的调用。因此,我认为安全问题仍然存在,因为操作系统函数ping可以重新定义来做一些完全不同的事情,而且可能是有害的。包似乎解决了可移植性问题,因为根据操作系统调用不同的方法。
发布于 2016-08-21 05:45:35
我们可以用Vectorize包装,并可以处理多个元素
ping1 <- Vectorize(ping)
ping1(c("yahoo.com", "google.com"))
ping1("google.com")https://stackoverflow.com/questions/39061174
复制相似问题