列表输入到sprintf(绕过省略号...函数)

rlu*_*ech 6 printf r ellipsis

是否有可能以列表或data.frame而不是单独的向量来提供R的sprintf(fmt,...)函数?

例如,我想要实现的目标:

df <- data.frame(v1 = c('aa','bb','c'), 
                 v2 = c('A', 'BB','C'),  
                 v3 = 8:10, 
                 stringsAsFactors = FALSE)

sprintf('x%02s%02s%02i', df[[1]], df[[2]], df[[3]])
[1] "xaa A08" "xbbBB09" "x c C10"
Run Code Online (Sandbox Code Playgroud)

但有一个更简洁的语法,如:

sprintf('x%02s%02s%02i', df)
Error in sprintf("x%02s%02s%02i", df) : too few arguments
Run Code Online (Sandbox Code Playgroud)

在我的实际情况中,我有更多的列来提供sprintf,使代码变得丑陋.

我想更普遍的问题是如何规避省略号...功能.

我肯定不是第一个问这个问题,但我找不到任何方向......

Sot*_*tos 10

你可以使它成为一个功能并用于do.call应用,即,

f1 <- function(...){sprintf('x%02s%02s%02i', ...)}

do.call(f1, df)
#[1] "xaa A08" "xbbBB09" "x c C10"
Run Code Online (Sandbox Code Playgroud)