вам нужно предоставить такое же количество? s в IN как количество значений в вашем массиве $ values
, это можно сделать легко, создав массив? s как
$in = join(',', array_fill(0, count($values), '?'));
и использовать этот массив $ в вашем разделе IN
. Это будет динамически предоставлять вам индивидуальный массив из-за вашего измененного массива $ values
Рассмотрим обобщение вашего процесса в определенной функции и переход в параметр года. И для прокрутки функции перейдите в векторе лет в lapply
для списка данных, которые будут конкатенированы в конце с помощью do.call(rbind, ...)
или bind_rows
.
get_whip_data <- function(yr_param) {
# ASSIGN URLS
whip_a <- paste0("http://www.espn.com/mlb/stats/pitching/_/year/", yr_param, "/order/false")
whip_b <- paste0("http://www.espn.com/mlb/stats/pitching/_/year/", yr_param, "/count/41/qualified/true/order/false")
whip_c <- paste0("http://www.espn.com/mlb/stats/pitching/_/year/", yr_param, "/count/81/order/false")
# BUILD DATA FRAMES
a_data <- whip_a %>%
read_html %>%
html_node("#my-players-table > div > div.mod-content > table") %>%
html_table(header = T)
b_data <- whip_b %>%
read_html %>%
html_node("#my-players-table > div > div.mod-content > table") %>%
html_table(header = T)
c_data <- whip_c %>%
read_html %>%
html_node("#my-players-table > div > div.mod-content > table") %>%
html_table(header = T)
# APPEND ALL
yr_df <- rbind(a_data, b_data, c_data) # OR do.call(rbind, list(a_data, b_data, c_data))
yr_df$year <- yr_param
return(yr_df)
}
df_list <- lapply(2005:2017, get_whip_data)
final_df <- do.call(rbind, df_list) # REQUIRES SAME COLUMNS ACROSS YEARS
final_df <- dplyr::bind_rows(df_list) # USE IF COLUMNS MAY DIFFER ACROSS YEARS
Если вам трудно -кодированные ссылки, передайте их с помощью Map
(обертка к mapply
). Это предполагает, что все параметры равны по длине, где Map
повторяется по-разному.
get_whip_data <- function(yr_param, whip_a, whip_b, whip_c) {
# BUILD DATA FRAMES
a_data <- whip_a %>%
read_html %>%
html_node("#my-players-table > div > div.mod-content > table") %>%
html_table(header = T)
b_data <- whip_b %>%
read_html %>%
html_node("#my-players-table > div > div.mod-content > table") %>%
html_table(header = T)
c_data <- whip_c %>%
read_html %>%
html_node("#my-players-table > div > div.mod-content > table") %>%
html_table(header = T)
# APPEND ALL
yr_df <- rbind(a_data, b_data, c_data)
yr_df$year <- yr_param
return(yr_df)
}
df_list <- Map(get_whip_data, years_vec, a_urls_vec, b_urls_vec, c_urls_vec)
final_df <- do.call(rbind, df_list) # REQUIRES SAME COLUMNS ACROSS YEARS
final_df <- dplyr::bind_rows(df_list) # USE IF COLUMNS MAY DIFFER ACROSS YEARS
paste0("http://www.espn.com/mlb/team/stats/", side, "/_/name/", team, "/year/", season, "/")
- каждый раз, когда я пытаюсь запустить его, я просто получаю сообщение об ошибке. Я запускаю его в такой функции, как выше, за исключением выбора команды, подачи / ватинга и сезона – papelr 19 July 2018 в 00:30Map
, вставляя вместе, чтобы создать URL. – Parfait 19 July 2018 в 11:31