我了解每個論點mapply(FUN, ...)的元素回圈的用法,并適用于這些組合。如果我將它們放在一個串列中而不是多個引數怎么辦?...FUN...
示例用例:
我定義了一個粘貼引數的函式,不包括NA:
pasteNotNA <- function(...,collapse=', '){
dots <- list(...);
paste(na.omit(unlist(dots)),collapse=collapse)
}
pasteNotNA('a',NA,'c')
# "a, c"
如果我將它們顯式傳遞給,我可以將其逐元素應用于向量mapply:
mapply(pasteNotNA, c('a',NA,'c'),c('X','Y','Z'),c('1','2',NA),USE.NAMES = F)
# "a, X, 1" "Y, 2" "c, Z"
我想要的是將它應用于串列并獲得相同的結果:
inp_list <- list(vec1=c('a',NA,'c'), vec2=c('X','Y','Z'), vec3=c('1','2',NA))
some_apply(pasteNotNA, inp_list)
# "a, X, 1" "Y, 2" "c, Z"
我想它一定也是來自*apply()或Map()家庭的東西,但找不到好的解決方案......
uj5u.com熱心網友回復:
1)使用do.call:
do.call("mapply", c(pasteNotNA, inp_list, USE.NAMES = FALSE))
## [1] "a, X, 1" "Y, 2" "c, Z"
2)或pmap_chr在 purrr 包中使用:
library(purrr)
pmap_chr(inp_list, pasteNotNA)
## [1] "a, X, 1" "Y, 2" "c, Z"
3)這也有效:
apply(as.data.frame(inp_list), 1, pasteNotNA)
## [1] "a, X, 1" "Y, 2" "c, Z"
uj5u.com熱心網友回復:
我們可以使用unite, 已經有na.rm論據
library(tidyr)
library(dplyr)
as_tibble(inp_list) %>%
unite(vec, everything(), na.rm = TRUE, sep =", ")
# A tibble: 3 × 1
vec
<chr>
1 a, X, 1
2 Y, 2
3 c, Z
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/454417.html
