如何正确使用 dplyr 中的管道运算符

How to correctly use pipe operator from dplyr

我正在尝试使用以下代码行:

library(dplyr)
library(zoo)
data.frame('col1' = c('C', 'A', 'B', 'A'), 'col2' = c(1,2,3,4)) %>%
    apply(as.matrix(.),
            1,
            function(ii) {
                merge(data.frame('xx' = sample(letters[1:10], 5, replace = T), 'val1' = 1:5),
                        data.frame('xx' = sample(letters[1:5], 5, replace = T), 'val2' = 21:25),
                        by = 'xx', all = T) %>%
                mutate('Info' = ii['col1']) %>%
                `colnames<-`(c('yy0', 'yy1', 'yy2', 'yy3'))

            })

使用此代码,我遇到以下错误

Error in match.fun(FUN) : '1' is not a function, character or symbol

如果我在不使用 pipe 运算符的情况下使用正常计算,上述流程如何完美运行。

能否请您帮助我如何在上述设置中的应用函数中访问父 dataframe 对象的信息?

例如,我想在应用中使用以下代码:

而不是

mutate('Info' = ii['col1'])

我想用

mutate('Info' = <<min of the column 'col2' in parent dataframe>>)

任何指点将不胜感激

只需将 apply 部分包裹在 {} 中即可屏蔽代码

data.frame('col1' = c('C', 'A', 'B', 'A'), 'col2' = c(1,2,3,4)) %>% {
    apply(as.matrix(.),
            1,
            function(ii) {
                merge(data.frame('xx' = sample(letters[1:10], 5, replace = T), 'val1' = 1:5),
                        data.frame('xx' = sample(letters[1:5], 5, replace = T), 'val2' = 21:25),
                        by = 'xx', all = T) %>%
                mutate('Info' = ii['col1']) %>%
                `colnames<-`(c('yy0', 'yy1', 'yy2', 'yy3'))

            })}

-输出

[[1]]
  yy0 yy1 yy2 yy3
1   a   1  22   C
2   b   5  NA   C
3   c  NA  25   C
4   e  NA  21   C
5   e  NA  23   C
6   e  NA  24   C
7   h   4  NA   C
8   j   2  NA   C
9   j   3  NA   C

[[2]]
   yy0 yy1 yy2 yy3
1    a   1  22   A
2    a   1  23   A
3    a   2  22   A
4    a   2  23   A
5    b  NA  21   A
6    b  NA  25   A
7    c   5  NA   A
8    d  NA  24   A
9    e   4  NA   A
10   j   3  NA   A

[[3]]
  yy0 yy1 yy2 yy3
1   a  NA  25   B
2   b  NA  24   B
3   c  NA  22   B
4   d   4  23   B
5   d   5  23   B
6   e  NA  21   B
7   g   2  NA   B
8   h   1  NA   B
9   h   3  NA   B

[[4]]
  yy0 yy1 yy2 yy3
1   a   4  22   A
2   a   4  23   A
3   b  NA  25   A
4   d  NA  21   A
5   e   3  24   A
6   f   1  NA   A
7   h   5  NA   A
8   j   2  NA   A

如果我们想要父数据集,创建一个对象

data.frame('col1' = c('C', 'A', 'B', 'A'), 'col2' = c(1,2,3,4)) %>% {  tmp <- .
    apply(as.matrix(.),
            1,
            function(ii) {
                merge(data.frame('xx' = sample(letters[1:10], 5, replace = T), 'val1' = 1:5),
                        data.frame('xx' = sample(letters[1:5], 5, replace = T), 'val2' = 21:25),
                        by = 'xx', all = T) %>%
                mutate('Info' =tmp[['col1']][which.min(tmp[['col2']])]) %>%
                `colnames<-`(c('yy0', 'yy1', 'yy2', 'yy3'))

            })}

-输出

[[1]]
  yy0 yy1 yy2 yy3
1   a  NA  21   C
2   a  NA  22   C
3   b   5  23   C
4   b   5  24   C
5   c   4  NA   C
6   d   1  25   C
7   f   3  NA   C
8   g   2  NA   C

[[2]]
  yy0 yy1 yy2 yy3
1   a   4  22   C
2   a   4  24   C
3   c   2  21   C
4   d  NA  23   C
5   e  NA  25   C
6   g   3  NA   C
7   h   5  NA   C
8   i   1  NA   C

[[3]]
   yy0 yy1 yy2 yy3
1    a   2  22   C
2    c   3  21   C
3    c   3  24   C
4    c   3  25   C
5    c   4  21   C
6    c   4  24   C
7    c   4  25   C
8    e  NA  23   C
9    i   5  NA   C
10   j   1  NA   C

[[4]]
  yy0 yy1 yy2 yy3
1   a   1  NA   C
2   b  NA  24   C
3   c   3  23   C
4   c   3  25   C
5   d   5  NA   C
6   e  NA  21   C
7   e  NA  22   C
8   h   2  NA   C
9   h   4  NA   C