首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问lapply列名

访问lapply列名
EN

Stack Overflow用户
提问于 2014-07-16 17:54:28
回答 3查看 9.7K关注 0票数 9

如果我在做

代码语言:javascript
复制
lapply(dataframe, function(x) {
    column.name <- #insert code here
})

如何访问lapply函数当前正在处理的列的名称?如代码所示,我希望将列名分配给变量column.name。为了澄清,是的,column.name将随着lapply的每一次迭代而改变。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-17 07:24:37

其实是有办法的。

代码语言:javascript
复制
df <- data.frame(a = 1:2, b = 3:4, c = 5:6)
lapply(df, function(x) names(df)[substitute(x)[[3]]])
$a
[1] "a"

$b
[1] "b"

$c
[1] "c"

但这应该作为最后的手段。相反,使用类似的东西(注释中给出了另一个选项)

代码语言:javascript
复制
lapply(seq_along(df), function(x) names(df[x]))
[[1]]
[1] "a"

[[2]]
[1] "b"

[[3]]
[1] "c"
票数 8
EN

Stack Overflow用户

发布于 2018-05-07 20:40:31

您可以迭代索引,但这不是一个类似R的代码。一种更直接的方法是使用Map,这是lapply的多元版本,它在传递给它的任何参数中并行地迭代一个适当的函数:

代码语言:javascript
复制
Map(function(value, name){paste(name, sum(value), sep = ": ")}, 
    Formaldehyde, 
    names(Formaldehyde))
#> $carb
#> [1] "carb: 3.1"
#> 
#> $optden
#> [1] "optden: 2.747"

如果使用tidyverse,purrr::imap是类似的方便版本的purrr::map2,它自动使用第一个参数的名称作为第二个参数:

代码语言:javascript
复制
purrr::imap(Formaldehyde, ~paste(.y, sum(.x), sep = ": "))
#> $carb
#> [1] "carb: 3.1"
#> 
#> $optden
#> [1] "optden: 2.747"

每个简化版本都是可用的:对于Mapmapply,一个多变量sapply (从技术上讲,Map只是一个带有SIMPLIFY = FALSE的包装器);对于imap,有一个要简化的类型下标的版本,例如imap_chr

票数 4
EN

Stack Overflow用户

发布于 2018-05-07 18:28:15

How to pass a variable into the function while using lapply

一个带有两个变量的lapply,所以我不必一直重写每个状态的函数。

代码语言:javascript
复制
library(tidycensus)    
get_Census <- function(x,y) {
      get_decennial(geography = "block group",
                    variables = "P001001",
                    sumfile = "sf1",
                    key = mykey,
                    state = x, county = y,year = "2000",
                    geometry = FALSE)
    }
    CO<-c("067","073","113")
    lapply(CO,get_Census,x="06")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24787534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档