在 R 中,我试图遍历列表的变量并从每个变量中提取一个特定的索引

In R, I am trying to loop through variables of lists and pull out a specific index from each one

在 R 中,我使用 readHTMLTable 从网络上读取 tables。我想要的 tables 出现在索引 16 和 17,[[16]][[17]].

这里有一小部分数据供您使用:

这些是一些包含 HTML table 的网址。

url1 = "http://www.basketball-reference.com/leagues/NBA_1980.html"
url2 = "http://www.basketball-reference.com/leagues/NBA_1981.html"
url3 = "http://www.basketball-reference.com/leagues/NBA_1982.html"

在这里,我在 table 中读取了名为 x1、x2 和 x3 的变量。

x1 = readHTMLTable(url1)
x2 = readHTMLTable(url2)
x3 = readHTMLTable(url3)

如果你查看每个 summary(x1)summary(x2)summary(x3) 的摘要并通过索引倒数,我想要的 table 是名为 "team" 和 "opponent" 的,出现在第 16 行和第 17 行。

我一直在尝试编写一个循环,循环遍历这些变量,并将每个变量命名为 "team" table 并命名为 team.1980team.1981team.1982,分别。 "opponent" table 将遵循相同的趋势,opp.1980,依此类推。

这是我一直在尝试的循环代码:

for(i in 1:3) {
  for (j in 1980:1982) {
    nam1 = paste0("team.", j)
    nam2 = paste0("opp.", j)
    assign(nam1, paste0("x.", i)[[16]])
    assign(nam2, paste0("x.", i)[[17]])
  }
}

我认为这个循环背后的理论是可行的,但是问题出现在两个 assign 函数上:

assign(nam1, paste0("x.", i)[[16]])
assign(nam2, paste0("x.", i)[[17]])

当我运行循环时,我收到错误信息

Error in paste0("x.", i)[[16]] : subscript out of bounds

这与我在 运行:

时遇到的错误相同
paste0("x", 1)[[16]]

> paste0("x", 1)[[16]]
  Error in paste0("x", 1)[[16]] : subscript out of bounds

所以我很确定这就是我的问题所在。有谁知道我如何循环变量并从每个变量中提取索引?

请记住,我是 R 的新手,所以非常感谢简单!提前致谢!

readHTMLTable()的输出是一个列表,元素可以通过名称引用;索引不是必需的。 (虽然你可以使用它。)

假设 x1x2x3 定义为您的 post。那么你可以这样做:

for (i in 1:3) {
    year <- 1980 + i - 1
    eval(parse(text=paste0("team.", year, " <- x", i, '[["team"]]')))
    eval(parse(text=paste0("opp.", year, " <- x", i, '[["opponent"]]')))
}

这会评估在循环中动态构建的已解析文本。它创建 6 个数据框:team.1980opp.1980 1980-1982 年。

让我们仔细看看它在做什么...

首先使用 paste0() 构造一个字符串,将值连接成一个没有分隔符的字符串。在第一次迭代中对 paste0() 的第一次调用产生了这个字符串:

'team.1980 <- x1[["team"]]'

对此调用 parse() 告诉 R 将该字符串转换为一个名为 表达式 的对象。可以使用 eval() 计算表达式。所以这个字符串被转换成一个 R 语句并被执行,从而分配 team.1980.

这个过程在 3 次迭代中的每一次迭代中都会继续。

这可能不是最好的方法,但它应该适合您的情况。我假设你不止这6个,否则你还不如把它们写成单独的作业。