如何使用purrr从列表中提取元素?

Dam*_*mbo 6 r purrr

我试图用来purrr访问formatted_address此列表中的级别:

tt <- lapply(c('Austin, Texas', 'Houston, Texas'),  
function(x) ggmap::geocode(x, output='all', nameType = 'long', sensor = F))
Run Code Online (Sandbox Code Playgroud)

最终输出应该是元素的向量$ formatted_address : chr "Austin, TX, USA",即c('Austin, TX, USA', 'Houston, TX, USA')

要开始了,我试图抓住第一个列表的两个元素的记录使用标准的索引,然后将其转换为purrr以下这个教程.

例如,我想

> tt[[1]]$results[[1]]$formatted_address
[1] "Austin, TX, USA"
Run Code Online (Sandbox Code Playgroud)

将等同于下面的代码,但它不是:

> map(tt[[1]]$results[[1]], 'formatted_address')
Error in map.poly(database, regions, exact, xlim, ylim, boundary, interior,  : 
  no recognized region names
Run Code Online (Sandbox Code Playgroud)

为什么这两行代码不相同?我怎么能用mapmap_chr创建一个记录向量formatted_address

Jan*_*uGe 9

我认为您的环境中存在命名冲突.因此,map您调用的函数是另一个函数的另一个函数(可能是maps包,它与您的错误代码中列出的参数相匹配,请参见此处).尝试使用显式上下文调用该函数,如下所示.此外,稍微更改您的语法,否则您的返回将为空.

purrr::map(tt, ~.x$results[[1]]$formatted_address)
Run Code Online (Sandbox Code Playgroud)

  • 命名空间混淆在R中很常见.我开始使用Hadley的`strict`包,这会强制您在调用具有重复名称的函数时澄清要使用的包.https://github.com/hadley/strict (2认同)