Почему tidycensus get_decennial () завершается ошибкой при использовании внутри функции? - PullRequest
0 голосов
/ 26 июня 2018

Я не совсем понимаю, почему возникает эта ошибка.Я пытаюсь написать функцию, которая передает символьную строку в 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 (ключ)), value_col = compat_as_lazy (enquo (value)),: неиспользованный аргумент (-NAME) "

1 Ответ

0 голосов
/ 26 июня 2018

Из-за того, как 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!
...