2016-07-27 8 views
0

Ich habe die folgende Funktion, um einige URLs von einer Website mit RSelinium und Phantomjs zu bekommen.Nested Loop mit Anwendung Funktionen in R

get_url <- function(url){ 
    rdr$navigate(url) 
    li <- rdr$findElements(using = 'xpath', "//div[@data-id]") 
    str <- sapply(li, function(x){x$getElementAttribute('outerHTML')}) 
    if(length(str)>1){ 
    tree <- htmlParse(str) 
    url <- getNodeSet(tree, '//div//a[@class="link url"]') 
    url <- sapply(url, xmlGetAttr, 'href') 
    } 
} 

Und die url wird in einer 30 x 60-Matrix gespeichert.

Ich habe versucht, dies mit der folgenden verschachtelten Schleife.

for(i in 1:ncol(offset_url)){ 
    for(j in 1:nrow(offset_url)){ 
    url_list <- rbind(url_list,get_url(offset_url[j,i])) 
    } 
} 

Es dauert jedoch sehr lange.

Gibt es eine Möglichkeit, die Zeit mit Apply-Funktionen zu bearbeiten?

+1

Es gibt eine Reihe von syntaktischen Problemen mit geposteten Code, die Sie als Beispiel zusammen werfen könnten. Können Sie tatsächlichen Code posten? – Parfait

Antwort

1

Ist das hilfreich?

do.call(rbind,list(mapply(function(x,y) get_url(offset_url[x,y]),x=row(offset_url),y=col(offset_url))))