我正在尝试在向量输入上运行purrr map
,在输出中,我希望输出列具有有意义的名称。
x <- c("a", "b")
y <- "end."
map_dfc(x, function(x) paste("pre ", x, y))
names(x) <- x
map_dfc(x, function(x) paste(x, y))
这是我期望的输出,它具有列名a
和b
:
# A tibble: 1 x 2
# a b
# <chr> <chr>
# pre a end. pre b end.
有没有一种方法可以避免运行
names(x) <- x
即
x <- c("a", "b")
y <- "end."
map_dfc(x, function(x) paste("pre ", x, y))
# A tibble: 1 x 2
# a b
# <chr> <chr>
产生data.frame / tibble并已附加列名吗?
我经常使用地图,经常忘记输入向量是否有名称。
答案 0 :(得分:2)
一种简单的方法是命名输入元素。通常这会导致代码更一致。
library(purrr)
x <- setNames(c("a", "b"), nm = c("a", "b"))
# x <- setNames(nm = c("a", "b")) # this is short cut of above
y <- "end."
map_dfc(x, function(x) paste("pre ", x, y))
答案 1 :(得分:1)
除了@RonakShah的建议setNames()
的注释之外,您还可以在没有purrr::map()
的情况下进行处理:
paste("pre ", x, y) %>%
as.list() %>%
as.data.frame(col.names = x, stringsAsFactors = F)
答案 2 :(得分:0)
purrr
的方式是在评论中使用set_names
(尽管正确的setNames
似乎已被set_names
中的purrr
取代):< / p>
map_dfc(set_names(x), function(x) paste("pre ", x, y))
使用set_names
时,如果使用默认参数,则无需指定新名称。