在 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.1980
、team.1981
和team.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()
的输出是一个列表,元素可以通过名称引用;索引不是必需的。 (虽然你可以使用它。)
假设 x1
、x2
和 x3
定义为您的 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.1980
和 opp.1980
1980-1982 年。
让我们仔细看看它在做什么...
首先使用 paste0()
构造一个字符串,将值连接成一个没有分隔符的字符串。在第一次迭代中对 paste0()
的第一次调用产生了这个字符串:
'team.1980 <- x1[["team"]]'
对此调用 parse()
告诉 R 将该字符串转换为一个名为 表达式 的对象。可以使用 eval()
计算表达式。所以这个字符串被转换成一个 R 语句并被执行,从而分配 team.1980
.
这个过程在 3 次迭代中的每一次迭代中都会继续。
这可能不是最好的方法,但它应该适合您的情况。我假设你不止这6个,否则你还不如把它们写成单独的作业。
在 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.1980
、team.1981
和team.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()
的输出是一个列表,元素可以通过名称引用;索引不是必需的。 (虽然你可以使用它。)
假设 x1
、x2
和 x3
定义为您的 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.1980
和 opp.1980
1980-1982 年。
让我们仔细看看它在做什么...
首先使用 paste0()
构造一个字符串,将值连接成一个没有分隔符的字符串。在第一次迭代中对 paste0()
的第一次调用产生了这个字符串:
'team.1980 <- x1[["team"]]'
对此调用 parse()
告诉 R 将该字符串转换为一个名为 表达式 的对象。可以使用 eval()
计算表达式。所以这个字符串被转换成一个 R 语句并被执行,从而分配 team.1980
.
这个过程在 3 次迭代中的每一次迭代中都会继续。
这可能不是最好的方法,但它应该适合您的情况。我假设你不止这6个,否则你还不如把它们写成单独的作业。