使用magrittr piper运算符,我们对向量执行操作。
strings <- "a b c"
strings %>% strsplit(" ") # Here we get a list
> strings %>% strsplit(" ")
[[1]]
[1] "a" "b" "c"
但我们假设我们只想得到这个列表中的单个元素。这需要我们(例如获得第一个元素):
(strings %>% strsplit(" "))[[1]][1] # Notice the braces around the expression..
现在我的问题:有没有办法使用管道运算符而不需要将整个表达式放在括号中?我认为,如果我们不必将其写入临时变量或使用括号但使用某种特殊的管道运算符,那将更加透明。
还有其他办法吗?
答案 0 :(得分:2)
或者:
strings %>% strsplit(" ") %>% { .[[1]][1] }
与
相同 strings %>% strsplit(" ") %>% .[[1]] %>% .[1]
比较时间:
library(purrr)
library(dplyr)
microbenchmark::microbenchmark(
(strings %>% strsplit(" ") %>% unlist %>% first)
,(strings %>% strsplit(" ") %>% { .[[1]][1] })
,(strings %>% strsplit(" ") %>% map_chr(1))
)
# Unit: microseconds
# expr min lq mean median uq max neval
# (strings %>% strsplit(" ") %>% unlist %>% first) 280.270 288.363 301.9581 295.4685 305.1395 442.511 100
# (strings %>% strsplit(" ") %>% { .[[1]][1] }) 211.980 219.875 229.4866 226.3875 235.6640 298.429 100
# (strings %>% strsplit(" ") %>% map_chr(1)) 682.123 693.965 747.1690 710.1495 752.3875 2578.091 100
答案 1 :(得分:1)
您可以使用map_*()
包中的purrr
函数:
strings %>% strsplit(" ") %>% map_chr(1)
[1] "a"
*
指的是您想要输出的类型,1
指的是列表中的位置。
此选项可用于矢量
> c("a b c", "d e f") %>% strsplit(" ") %>% map_chr(1)
[1] "a" "d"
答案 2 :(得分:0)
我们可以做到
strings %>%
strsplit(" ") %>%
unlist %>%
.[1]
#[1] "a"
答案 3 :(得分:0)
您可以在#define fill(where_l, where_r, where_t, where_b, what_l, what_r, what_t, what_b) \
\
/*lt*/ \
*p++ = where_l; \
*p++ = where_t; \
*p++ = 0.5f; \
*p++ = 1.0f; \
*p++ = what_l; \
*p++ = what_t; \
\
/* rt */ \
*p++ = where_r; \
*p++ = where_t; \
*p++ = 0.5f; \
*p++ = 1.0f; \
*p++ = what_r; \
*p++ = what_t; \
\
/*lb*/ \
*p++ = where_l; \
*p++ = where_b; \
*p++ = 0.5f; \
*p++ = 1.0f; \
*p++ = what_l; \
*p++ = what_b; \
\
/*rb*/ \
*p++ = where_r; \
*p++ = where_b; \
*p++ = 0.5f; \
*p++ = 1.0f; \
*p++ = what_r; \
*p++ = what_b;
int main(int argc, char **argv) {
float* p = (float*)malloc(999);
fill(1, 2, 3, 4, 5, 6, 7, 8)
}
列表之后使用extract
,如下所示:
unlist
希望这有帮助!
答案 4 :(得分:0)
这是100%的magrittr方式:
library(magrittr)
strings %>% strsplit(" ") %>% extract2(1) %>% extract(1)
extract
只是[
和extract2
的别名[[
的别名,所以您也可以这样做:
strings %>% strsplit(" ") %>% `[[`(1) %>% `[`(1)
虽然在大多数情况下,此表单通常更具可读性:
strings %>% {strsplit(.," ")[[1]][1]}