【问题标题】:R function wont modify global variableR函数不会修改全局变量
【发布时间】:2016-11-17 08:53:23
【问题描述】:

我有一段简单的 R 代码,它从网站读取 html 数据,然后我尝试遍历页面并从每个页面获取数据。我已经多次使用这段代码并且它有效。它将每个页面的结果添加到 R 变量中,但由于某种原因在此站点上它不起作用。有什么想法吗?

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")

【问题讨论】:

  • x steemdb.com/accounts/reputation?page=1") x 包含数据。
  • 在你的函数中添加return(data)怎么样?我不建议混合全局环境和功能环境。

标签: r xml rcurl


【解决方案1】:

我想我知道出了什么问题

在您的函数中将 data &lt;- table 更改为 data &lt;&lt;- table

您将结果分配给函数的本地环境,而&lt;&lt;- 将其分配给全局环境。

我建议您尝试以下方法

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

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

甚至更好

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.

【讨论】:

  • 感谢 dimitris_ps,只是为了编辑您的代码 do.call(rbind, data) 需要执行两次才能使其正常工作。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-04
  • 1970-01-01
  • 1970-01-01
  • 2017-01-23
  • 2021-05-31
  • 1970-01-01
相关资源
最近更新 更多