是否可以通过列表或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"

但具有更简洁的语法,例如:
sprintf('x%02s%02s%02i', df)
Error in sprintf("x%02s%02s%02i", df) : too few arguments

在我的实际情况下,我还有更多的列来填充sprintf,使代码很难看。

我想更普遍的问题是如何规避省略号...函数。

我敢肯定不是第一个问这个的人,但是我找不到这个方向的任何东西。

最佳答案

您可以使其成为函数,并使用do.call进行应用,即,

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

do.call(f1, df)
#[1] "xaa A08" "xbbBB09" "x c C10"

关于r - 列出sprintf的输入(绕过省略号…功能),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44100457/

10-10 02:27