2016-11-17 4 views
0

J'ai un simple morceau de code R qui lit les données html d'un site Web, puis j'essaie de parcourir les pages et d'obtenir des données de chaque page. J'ai utilisé ce morceau de code plusieurs fois et cela fonctionne. Il ajoute à une variable R les résultats de chaque page, mais pour une raison quelconque sur ce site, il ne fonctionnera pas. Des idées?La fonction R ne modifie pas la variable globale

library(XML) 
library(RCurl) 


data <- NULL 

getData <- function(url) { 
#For some reason cant read directly from site, need to use RCurl to get the data first 
xData <- getURL(url) 
table <- data.frame(readHTMLTable(xData)$'NULL') 
data <- table 
} 

getData(url="https://steemdb.com/accounts/reputation?page=1") 
+0

x <- getData (url = "https://steemdb.com/accounts/reputation?page = 1 ") x contient les données. – Indi

+0

Que diriez-vous d'ajouter 'return (data)' à votre fonction? Je ne conseillerais pas de mélanger l'environnement global et l'environnement de fonction. –

Répondre

1

Je pense que je sais ce qui est mal

changement data <- table à data <<- table au sein de votre fonction

Vous assignez le résultat à l'environnement local pour la fonction, tandis que le <<- sera l'assignant à l'environnement mondial.

Je vous propose d'essayer les éléments suivants

library(rvest) 
getData <- function(url) { html_table(read_html(url)) } 

data <- getData("https://steemdb.com/accounts/reputation?page=1") 

Ou mieux encore

library(rvest) 
getData <- function(url) { html_table(read_html(url)) } 
steemdb.url <-"https://steemdb.com/accounts/reputation?page=" 

data <- lapply(1:100, function(i) getData(paste0(steemdb.url, i))) 
data <- do.call(rbind, data) 
View(data) 

1:100 will get you the first 100 pages. 
+0

Merci dimitris_ps, juste pour éditer votre code do.call (rbind, data) doit être fait deux fois pour que cela fonctionne. Merci pour l'aide. – Kharoof