将功能应用于列-Wikipedia检索数据

时间:2019-10-16 11:23:04

标签: r

Hello Stack Overflow社区 我正在尝试使用以下代码从Wikipedia检索文章数据

问题在于它没有将函数的结果封装在数据框中。

library(tidyverse)
library(glue)
library(XML)
library(RCurl)

# Function

wiki_data <- function(data,end_url="Tensorflow"){

  html <- getURL(glue("https://en.wikipedia.org/wiki/{end_url}"), followlocation = TRUE)

  # parse html
  doc = htmlParse(html, asText=TRUE)
  plain.text <- xpathSApply(doc, "//p", xmlValue)
  cat(paste(plain.text, collapse = "\n"))
}

#Creation of data frame

df <- data.frame(items=c("Tensorflow","Data"))

#Applying the function
df %>% 
  mutate(test=wiki_data(items,end_url = items))

结果将是具有两列的数据框,一个项目,另一个项目,该函数的结果(维基百科结果)。 感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

您的函数不返回任何内容。您可以将结果保存在res中。此外,您在函数中不需要data参数。我假设您使用了RCurlXML库。

wiki_data <- function(end_url){
    require(XML)
    require(RCurl)
    require(glue)
    html <- getURL(glue("https://en.wikipedia.org/wiki/{end_url}"), followlocation = TRUE)

    # parse html
    doc <- htmlParse(html, asText=TRUE)
    plain.text <- xpathSApply(doc, "//p", xmlValue)
    res <- paste(plain.text, collapse = "\n")
    return(res)
}

这不是最优雅的解决方案,但它应该可以工作。 然后,您可以使用rowwise()来应用您的功能:

library(dplyr)
df <- df %>% 
    rowwise() %>% 
    mutate(test = wiki_data(items))