为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
进行包装。