我试图使用"管状"运算符根据LETTERS
向量创建一个与数据框中其他变量长度相同的新变量。出了点问题,我对magrittr
来说太新了,不能诊断问题。
当我尝试使用#34;传统的"时,我能够正确地创建变量。嵌套函数:
expand.grid(a=c(1000-500,1000,1000+500),
b=c(15,150)) %>%
mutate(c=paste("foo", LETTERS[seq_along(a)],sep="_"))
## a b c
## 1 500 15 foo_A
## 2 1000 15 foo_B
## 3 1500 15 foo_C
## 4 500 150 foo_D
## 5 1000 150 foo_E
## 6 1500 150 foo_F
那么我想我会尝试使用来自%>%
和magrittr
的管状dplyr
expand.grid(a=c(1000-500,1000,1000+500),
b=c(15,150)) %>%
mutate(c=paste("foo", a %>%
seq_along %>%
LETTERS[.],sep="_"))
## Error: incorrect number of dimensions
当我从[
添加别名提取(magrittr
)函数时,这也不起作用:
expand.grid(a=c(1000-500,1000,1000+500),
b=c(15,150)) %>%
mutate(c=paste("foo", a %>%
seq_along %>%
extract(LETTERS,.),
sep="_"))
## Error: incorrect number of dimensions
我尝试使用debug_pipe
调试管道无济于事。我非常感谢任何想法!
答案 0 :(得分:4)
如果你愿意,你可以:
expand.grid(a=1000+c(-500, 0, 500), b=c(15,150)) %>%
mutate(c = a %>% seq_along %>% LETTERS[.] %>% paste0("foo_", .))
答案 1 :(得分:3)
如果我们定义一个辅助函数Swap
,那么它可以在不使用的情况下完成。像这样:
library(dplyr)
library(magrittr)
Swap <- function(f) function(x, y, ...) f(y, x, ...)
expand.grid(a=1000+c(-500, 0, 500), b=c(15,150)) %>%
mutate(c = a %>%
seq_along %>%
Swap(extract)(LETTERS) %>%
Swap(paste0)("foo_"))