【问题标题】:How to create a vector or list of tables in R如何在 R 中创建向量或表列表
【发布时间】:2013-01-01 11:23:22
【问题描述】:

我正在尝试从网站上抓取一堆表格。我希望能够将它们全部存储在一个或多个变量中——基本上是为了方便访问。 下面的代码是我目前所拥有的,我正在使用我发现的 XML 包,它在一个表上运行良好,但不能让它在多个表上工作。

i <- 1
N <- 3
DSFL1<- 'http://website/results/2012_aussies_thu/results/'
DSFL2 <- '.html'
SportHTML <- vector(length=N)
vectorOfTables <- vector(length=N)

for ( i in i:N) {
  DSVL <- i
  SportHTML[i] <- paste(DSFL1,DSVL,DSFL2, sep="")
  Sport.table <- readHTMLTable(SportHTML[i], header=T, which=3,stringsAsFactors=F) 
  vectorOfTables[1] <- Sport.table
  i <- i + 1
  }

任何帮助将不胜感激。

【问题讨论】:

  • for 循环中的 vectorOfTables 有一个 [1] 而不是 [i]

标签: r web-scraping


【解决方案1】:

您的表格是长度大于 1(并且可能长度不同)的对象,它们必须放入一个列表中。所以你应该这样做:

vectorOfTables <- vector(mode = "list", length = N)

当你在循环内赋值时,做:

vectorOfTables[[i]] <- Sport.table

但是,您可以避免for 循环并使用lapply 创建一个列表:

SportHTML    <- paste0(DSFL1, 1:N, DSFL2)
ListOfTables <- lapply(SportHTML, readHTMLTable, header = TRUE,
                       which = 3, stringsAsFactors = FALSE)

你可以看到它也更加简洁。

【讨论】:

  • 我知道有一种更简洁的方式来编写此代码,而无需使用循环。我的爱人!谢谢你们的帮助:)
  • 如果你在 R 中写了一个循环,你就太辛苦了。 R 具有用于处理列表的复杂设施(类似lisp),这意味着您永远不必循环...... :)
猜你喜欢
  • 2011-02-07
  • 2014-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-30
  • 2016-03-03
相关资源
最近更新 更多