为R中的'Vectorize()`的输出创建列名?

为R中的'Vectorize()`的输出创建列名?,r,function,vectorization,R,Function,Vectorization,我想知道是否有办法为以下矢量化R函数的输出(见下图)创建两个列名x1和x2: normal <- Vectorize(function(n){ x <- rnorm(n) mean <- mean(x) sd <- sd(x) return(c(mean = mean, sd = sd)) }) # Example of use: normal(n = c(1e2, 1e3)) normal只需命名输入向量即可。由于默认情况下,USE.NA

我想知道是否有办法为以下
矢量化
R
函数的输出(见下图)创建两个列名
x1
x2

normal <- Vectorize(function(n){

     x <- rnorm(n)
  mean <- mean(x)
    sd <- sd(x)

  return(c(mean = mean, sd = sd))
})
# Example of use:
normal(n = c(1e2, 1e3))

normal只需命名输入向量即可。由于默认情况下,
USE.NAMES
TRUE
,因此名称将一直保留到输出

normal(n = c(X1 = 1e2, X2 = 1e3))
也可以在函数中设置名称

normal <- function(x){
  if(is.null(names(x))) names(x) <- paste0('x', 1:length(x))
  fun <- Vectorize(
          function(n){
              x     <- rnorm(n)
              mean  <- mean(x)
              sd    <- sd(x)
              return(c(mean = mean, sd = sd))
          }
          )
  fun(x)
}


# Example of use:
normal(c(1e2, 1e3))

正常,谢谢,但是我们不能在函数中使用它?我的目标是在函数内部实现这一点。也就是说,用户不需要提供
X1
X2
@rnorouzian,但是当您的用户提供了一个命名向量时会怎么样呢?他们不希望输出具有相同的名称吗?猜测用户想要什么可能会导致代码对维护人员来说很复杂,对用户来说也很奇怪。@NathanWerth,这不是问题所在。我只是希望列名是我想要的。现在,由于用户可以使用任意数量的
n
元素,因此我希望列名具有数字附件,例如
r1。,ri
。您可以用data.frame()换行以获得自动名称X1和X2。@Frank,您是否介意显示这两个名称,例如:
return(data.frame(mean=mean,sd=sd))
,这没有帮助。或者你可能是指别的什么?在函数中使用
data.frame(正常(n=c(1e2,1e3))
@Renu,我希望我能使用
data.frame(正常(n=c(1e2,1e3))
?为什么?不会再快了。您可以创建一个新函数,并围绕当前调用的
normal
进行包装。