为什么在函数中使用 tidycensus get_decennial() 会失败?
Why does tidycensus get_decennial() fail when used within a function?
我很困惑为什么会出现这个错误。我正在尝试编写一个将字符串从 tidycensus
包传递给 get_decennial()
的函数,但它会引发错误。
我能够成功 运行 函数范围之外的相同代码。我似乎无法理解为什么将输入传递给函数会使它失败。特别是,因为我已经成功地将对象传递给 county
参数的函数(如下所示)。有没有其他人遇到过这样的事情?我认为下面的例子说明了这个问题。我尝试从上次通话中复制 output/error,但我提前对低质量格式表示歉意。
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
"显示回溯
Re运行 带调试
gather_(data, key_col = compat_as_lazy(enquo(key)), value_col = compat_as_lazy(enquo(value)), 错误:
未使用的参数 (-NAME)"
因为 R 如何沿着环境层次评估对象。
也就是说,get_decennial() 函数的代码中已经存在一个名为"x" 的元素。您的自定义函数 why_doesnt_this_work() 的评估级别与 get_decennial() 相同。因此,至少两个 elements/objects 的相同值被应用到 get_decennial 管道,破坏了事情。
要解决此问题,只需将自定义 x 重命名为 get_decennial 所期望的名称,即 "state"。
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!
我很困惑为什么会出现这个错误。我正在尝试编写一个将字符串从 tidycensus
包传递给 get_decennial()
的函数,但它会引发错误。
我能够成功 运行 函数范围之外的相同代码。我似乎无法理解为什么将输入传递给函数会使它失败。特别是,因为我已经成功地将对象传递给 county
参数的函数(如下所示)。有没有其他人遇到过这样的事情?我认为下面的例子说明了这个问题。我尝试从上次通话中复制 output/error,但我提前对低质量格式表示歉意。
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
"显示回溯
Re运行 带调试 gather_(data, key_col = compat_as_lazy(enquo(key)), value_col = compat_as_lazy(enquo(value)), 错误: 未使用的参数 (-NAME)"
因为 R 如何沿着环境层次评估对象。 也就是说,get_decennial() 函数的代码中已经存在一个名为"x" 的元素。您的自定义函数 why_doesnt_this_work() 的评估级别与 get_decennial() 相同。因此,至少两个 elements/objects 的相同值被应用到 get_decennial 管道,破坏了事情。
要解决此问题,只需将自定义 x 重命名为 get_decennial 所期望的名称,即 "state"。
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!