我正在使用apply函数从stat.NCAA.org站点抓取多个网页,目的是将所有数据合并为一个小标题。我正在尝试清除apply函数中的数据,以便避免为从每个网页抓取的数据分配变量名,这会减慢处理速度(这对于最终将抓取数千页的项目而言)。 / p>
在我的apply函数中,我需要对访问的url的名称进行逻辑测试,以了解哪些清理功能适用于该特定数据,但是我不知道如何访问函数中的名称。这是我的工作代码:
#Load Libraries
library(RSelenium)
library(XML)
library(dplyr)
#Define URLs for stat tables (URL order must be in the order of the vector of names in row 22)
Wartburg_2018_url_vector <- c('https://stats.ncaa.org/team/750/stats?game_sport_year_ctl_id=14280&id=14280&year_stat_category_id=14355',
'https://stats.ncaa.org/team/750/stats?game_sport_year_ctl_id=14280&id=14280&year_stat_category_id=14349',
'https://stats.ncaa.org/team/750/stats?game_sport_year_ctl_id=14280&id=14280&year_stat_category_id=14350',
'https://stats.ncaa.org/team/750/stats?game_sport_year_ctl_id=14280&id=14280&year_stat_category_id=14353',
'https://stats.ncaa.org/team/750/stats?game_sport_year_ctl_id=14280&id=14280&year_stat_category_id=14357',
'https://stats.ncaa.org/team/750/stats?game_sport_year_ctl_id=14280&id=14280&year_stat_category_id=14348',
'https://stats.ncaa.org/team/750/stats?game_sport_year_ctl_id=14280&id=14280&year_stat_category_id=14341',
'https://stats.ncaa.org/team/750/stats?game_sport_year_ctl_id=14280&id=14280&year_stat_category_id=14352',
'https://stats.ncaa.org/team/750/stats?game_sport_year_ctl_id=14280&id=14280&year_stat_category_id=14351',
'https://stats.ncaa.org/team/750/stats?game_sport_year_ctl_id=14280&id=14280&year_stat_category_id=14342',
'https://stats.ncaa.org/team/750/stats?game_sport_year_ctl_id=14280&id=14280&year_stat_category_id=14340',
'https://stats.ncaa.org/team/750/stats?game_sport_year_ctl_id=14280&id=14280&year_stat_category_id=14346',
'https://stats.ncaa.org/team/750/stats?game_sport_year_ctl_id=14280&id=14280&year_stat_category_id=14345',
'https://stats.ncaa.org/team/750/stats?game_sport_year_ctl_id=14280&id=14280&year_stat_category_id=14347',
'https://stats.ncaa.org/team/750/stats?game_sport_year_ctl_id=14280&id=14280&year_stat_category_id=14356')
names(Wartburg_2018_url_vector) <- c('Defense',
'Fumbles',
'Kicking',
'Kickoffs and KO Returns',
'Participation',
'Passes Defended',
'Passing',
'Punt Returns',
'Punting',
'Receiving',
'Rushing',
'Sacks',
'Scoring',
'Tackles',
'Turnover Margin')
#launch RSelenium
shell('docker run -d -p 4445:4444 selenium/standalone-chrome')
remDr <- remoteDriver(remoteServerAddr = "localhost", port = 4445L, browserName = "chrome")
remDr$open()
#access webpage, parse the html, read the table/list, select the stat grid, convert to data frame,
#convert to tibble, convert player names to character string, and name list elements
Wartburg_2018_stat_grid <- Wartburg_2018_url_vector %>%
lapply(
function(x) {
remDr$navigate(x)
htmlParse(remDr$getPageSource()[[1]]) %>%
readHTMLTable(stringsAsFactors = FALSE) %>%
(function(y) {
y[3]
}) %>%
as.data.frame() %>%
as_tibble() %>%
mutate(Player = stat_grid.Player) %>%
if(names(x) == 'Defense') {
mutate(FR = as.double(gsub(",","",stat_grid.Fumbles.Recovered)),
Blocks = as.double(gsub(",","",stat_grid.Blkd))
) %>%
select(Player:Blocks)
}
}
)
我收到以下错误:
if(。)names(x)==“ Defense” else {:参数不是 可以解释为逻辑
当我尝试运行一个简单的apply函数(该函数需要访问该函数中的名称)时,我的问题似乎是names(x)
返回空值。
答案 0 :(得分:1)
您将列表标识符与names()
混淆
使用lapply()
时,您要将Wartburg_2018_stat_grid
转换为列表,然后运行您指定的功能。
同样,您可以这样做:
myList <- as.list(Wartburg_2018_stat_grid)
myList
您可以使用其标识符从列表中检索一个值。例如
myList$Defense
这将返回存储在该标识符下的项目。这与该商品的名称不同。
未指定名称。因此:
names(myList$Defense)
NULL
您可以使用以下名称指定名称:
names(myList$Defense) <- 'name1'
myList$Defense
name1
"https://stats.ncaa.org/team/750/(...)id=14355"
这会将名称添加到列表myList
中位于标识符Defense
下的项目中