Почему tidycensus get_decennial() завершается ошибкой при использовании внутри функции?
Я совершенно не понимаю, почему возникает эта ошибка. Я пытаюсь написать функцию, которая передает символьную строку get_decennial()
от tidycensus
пакет, но выдает ошибку.
Я могу успешно запустить тот же код за пределами функции. Я не могу понять, почему передача входа в функцию приводит к сбою. Тем более, что я успешно передал объект в функцию уже для county
параметр (как показано ниже). Кто-нибудь еще сталкивался с чем-то подобным? Я думаю, что приведенный ниже пример иллюстрирует проблему. Я попытался скопировать вывод / ошибку из последнего вызова, но заранее извиняюсь за низкое качество форматирования.
library(tidycensus)
library(dplyr)
census_api_key(Sys.getenv("CENSUS_API_KEY")) # put your census api key here
oregon <- filter(fips_codes, state_name == "Oregon")
oregon_counties <- oregon$county_code
# this works
why_does_this_work <- "Oregon"
get_decennial(geography = "block group",
state = why_does_this_work,
variables = "H00010001",
county = oregon_counties,
quiet = TRUE)
# why doesn't this work
why_doesnt_this_work <- function(x) {
get_decennial(geography = "block group",
state = x,
variables = "H00010001",
county = oregon_counties,
quiet = TRUE)
}
why_doesnt_this_work("Oregon")
Getting data from the 2010 decennial Census
Getting data from the 2010 decennial Census
Getting data from the 2010 decennial Census
Error : Result 1 is not a length 1 atomic vector
In addition: Warning messages:
1: '03' is not a valid FIPS code or state name/abbreviation
2: '03' is not a valid FIPS code or state name/abbreviation
"Показать трассировку
Перезапустить с ошибкой отладки в collect_(data, key_col = compat_as_lazy(enquo(key)), value_col = compat_as_lazy(enquo(value)),: неиспользованный аргумент (-NAME)"
1 ответ
Из-за того, как R оценивает объекты по иерархии сред. Другими словами, в коде функции get_decennial () уже есть элемент с именем "x". Ваша пользовательская функция why_doesnt_this_work() оценивается на том же уровне, что и get_decennial(). Таким образом, одно и то же значение по крайней мере для двух элементов / объектов применяется к конвейеру get_decennial, что разрушает вещи.
Чтобы решить эту проблему, просто переименуйте ваш пользовательский x в то, что ожидает get_decennial, то есть "состояние".
why_doesnt_this_work <- function(state) {
get_decennial(geography = "block group",
state = as.character(state),
variables = "H00010001",
county = oregon_counties,
quiet = TRUE)
}
why_doesnt_this_work('Oregon') ## Now it works!