如何正确使用 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
我正在尝试使用以下代码行:
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