3

我正在尝试使用“管道式”运算符来创建一个新变量,该变量的长度与数据框中的其他变量相同,基于LETTERS向量。出了点问题,我太新了,magrittr无法诊断问题。

当我尝试使用一些“传统”嵌套函数时,我能够正确创建变量:

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

所以我想我会尝试%>%使用magrittrdplyr

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无济于事。我会非常感谢任何想法!

4

2 回答 2

4

You can, if you want:

expand.grid(a=1000+c(-500, 0, 500), b=c(15,150)) %>%
mutate(c = a %>% seq_along %>% LETTERS[.] %>% paste0("foo_", .))
于 2014-05-18T15:23:02.993 回答
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_"))
于 2014-05-18T21:22:16.370 回答