R 为什么TidySensus get_decentanial()在函数中使用时失败?

R 为什么TidySensus get_decentanial()在函数中使用时失败?,r,tidycensus,R,Tidycensus,我很困惑为什么会发生这种错误。我试图编写一个函数,将字符串从tidyensus包传递到get_decentanial(),但它抛出了一个错误 我能够在函数范围外成功运行相同的代码。我似乎无法理解为什么将输入传递给函数会导致它失败。特别是,因为我成功地将对象传递给了country参数的函数(如下所示)。还有其他人遇到过类似的情况吗?我认为下面的例子说明了这个问题。我试图复制上一次调用的输出/错误,但我为预先设置的低质量格式道歉 library(tidycensus) library(dplyr)

我很困惑为什么会发生这种错误。我试图编写一个函数,将字符串从
tidyensus
包传递到
get_decentanial()
,但它抛出了一个错误

我能够在函数范围外成功运行相同的代码。我似乎无法理解为什么将输入传递给函数会导致它失败。特别是,因为我成功地将对象传递给了
country
参数的函数(如下所示)。还有其他人遇到过类似的情况吗?我认为下面的例子说明了这个问题。我试图复制上一次调用的输出/错误,但我为预先设置的低质量格式道歉

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")
库(tidycensus)
图书馆(dplyr)
普查api密钥(Sys.getenv(“普查api密钥”)#将普查api密钥放在这里

俄勒冈州因为R是如何沿着环境层次评估对象的。 换句话说,在get_decentanial()函数的代码中已经有一个名为“x”的元素。您的自定义函数why_doesnu this_work()的计算级别与get_decenial()相同。因此,至少有两个元素/对象的相同值应用于get_decentanical管道,从而破坏了这些东西

为了解决这个问题,只需将您的自定义x重命名为get_Decenial所期望的,即“状态”


为什么不这样做,因为R是如何评估环境层次结构中的对象的。
换句话说,在get_decentanial()函数的代码中已经有一个名为“x”的元素。您的自定义函数why_doesnu this_work()的计算级别与get_decenial()相同。因此,至少有两个元素/对象的相同值应用于get_decentanical管道,从而破坏了这些东西

为了解决这个问题,只需将您的自定义x重命名为get_Decenial所期望的,即“状态”

为什么这个不行
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!