我有以下函数A
和B
表示向量作为输入。我的问题是如何为这个功能提供不同数量的vector。在我的函数中,n
是固定的并显示样本数。例如,我需要我的函数也适用于这种情况:sample_sum (A, B, C, D, E, n, ...)
。
另外对于我得到矢量A和B的样本的部分(即在行sample_A <- qss(A, n=n, ...)
中)我如何修改它以适应不使用for
循环的不同数量的矢量,因为for
循环不是足够快。
谢谢
sample_sum <- function(A, B, n, ...)
{
qss <- function(X, n, ...)
{
r_X <- range(X)
dens_X <- density(X, ...)
sample(dens_X$x, size=n, prob=dens_X$y, replace=TRUE)
}
sample_A <- qss(A, n=n, ...)
sample_B <- qss(B, n=n, ...)
sample_A + sample_B
}
答案 0 :(得分:1)
我认为您需要的是以下内容:
new_sample_sum <- function(my_vector_list, n, ...)
{
qss <- function(X, n, ...)
{
r_X <- range(X)
dens_X <- density(X, ...)
sample(dens_X$x, size=n, prob=dens_X$y, replace=TRUE)
}
rowSums(sapply(my_vector_list, qss, n = n))
}
您可以在矢量列表中放置多个矢量,然后在列表上进行计算,而不必担心矢量的数量。只是关于计算的简短说明,sapply将循环遍历列表中的所有向量,然后返回表,其中包含将qss应用于每个向量的所有结果(对于每个向量,结果是一列中的sapply返回的表)。由于您在函数的最后一步中添加了向量,因此我会在表格的rowSums中显示所有结果。
为了证明一致性:
set.seed(1)
x <- c(1,2,3,4)
y <- c(6,7,9,0)
z <- c(2,2,2,2)
> sample_sum(x, y, n=2)
[1] 6.545129 13.474390
> new_sample_sum(list(x, y), n = 2)
[1] 6.545129 13.474390
或者有更多载体:
sample_sum <- function(A, B, C, n, ...)
{
qss <- function(X, n, ...)
{
r_X <- range(X)
dens_X <- density(X, ...)
sample(dens_X$x, size=n, prob=dens_X$y, replace=TRUE)
}
sample_A <- qss(A, n=n, ...)
sample_B <- qss(B, n=n, ...)
sample_C <- qss(C, n=n, ...)
sample_A + sample_B + sample_C
}
set.seed(1)
> sample_sum(x, y, z, n = 2)
[1] 6.102482 15.450364
set.seed(1)
> new_sample_sum(list(x, y, z), n = 2)
[1] 6.102482 15.450364
答案 1 :(得分:0)
只需使用n=length(A)
动态确定矢量参数的大小。