簡體   English   中英

在R中,我試圖遍歷列表變量並從每個變量中提取特定索引

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

在R中,我使用readHTMLTable從Web讀取表。 我想要的表出現在索引16和17 [[16]][[17]]

以下是供您使用的一小部分數據示例:

這些是包含HTML表的一些URL。

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"

在這里,我讀了表中的變量x1,x2和x3。

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

如果查看每個summary(x1)summary(x2)summary(x3)並通過索引遞減計數,則我想要的表分別是名為“ team”和“ opponent”的表第16行和第17行。

我一直在嘗試編寫一個循環,循環遍歷這些循環,並將每個循環的“ team”表命名為分別名為team.1980team.1981team.1982的變量。 “對手”表將遵循相同的趨勢, 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的定義與您的帖子相同。 然后,您可以執行以下操作:

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個,否則您最好將它們寫為單獨的作業。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM