2016-08-21 3 views
1

Ich habe einen Datenrahmen, der Domain-Name Spalte hat. Ich möchte sehen, welche Domain existiert, indem ich ihre Domain-Namen anpinge. Ich kann eine individuelle Ping-Antwort von der folgenden Funktion erhalten.Wie bekomme ich eine Ping-Antwort in R

Gibt es ein R-Paket, wo ich Ping-Antwort für die gesamte Spalte erhalten kann, die Tausende von Domänennamen hat.

Antwort

5

Es tun, ist keine gute Idee, system() Befehle verwenden - in der Regel in einer beliebigen Programmiersprache. Die main reasons sind Sicherheit und Portabilitätsprobleme.

Das pingr Paket bietet eine Möglichkeit, einen Remote-Server innerhalb von R zu 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 

bearbeiten/Kommentar

Mit Blick auf den Quellcode der Funktionen pingr::ping() und pingr:::ping_os() es erscheint dass das Paket einen Anruf an system() verwendet. Daher denke ich, dass security concerns remain, da die OS-Funktion ping neu definiert werden könnte, etwas völlig anderes und möglicherweise schädlich zu tun. Was das Paket zu lösen scheint, sind Portabilitätsprobleme, da je nach Betriebssystem unterschiedliche Methoden aufgerufen werden.

+0

Ob der Aufruf von 'system' ein Sicherheitsproblem ist, hängt vom Kontext ab. Wenn der Code auf beliebigen Rechnern ausgeführt wird, auf die Sie keinen Einfluss haben, dann könnte "ping" als etwas anderes neu definiert werden und es gibt ein Sicherheitsproblem. Wenn Sie eine Reihe von Adressen von Ihrem eigenen Computer aus anpingen möchten, ist das kein Problem. –

+0

Es ist sehr langsam. Nehmen wir viel Zeit, gibt es einen anderen Weg, der schneller ist? Und dann möchte ich sehen, welche Websites nicht pingt. – Neil

+0

@Neil Das Ping-Timeout kann auf Systemebene geändert werden. In Linux-Systemen wäre eine Option, diese Zeit zu reduzieren, "ping -i 0.2". Sie könnten diese Option an pingr übergeben, indem Sie 'URLs <- einfügen (" - i 0.2 ", URLs)' verwenden. Dies sollte die Funktion beschleunigen. Ich weiß nichts über Optionen auf anderen Betriebssystemen. – RHertel

2

Wir können mit Vectorize wickeln und für mehrere Elemente

ping1 <- Vectorize(ping) 
ping1(c("yahoo.com", "google.com")) 
ping1("google.com") 
Verwandte Themen