将函数应用于 R 中参数的不同组合
Applying function to different combinations of the arguments in R
我有两个变量(一个独立变量和一个依赖变量),每个变量包含 5 个数据点,我创建了一个 function (x,y)
来为它们拟合不同的模型。这工作得很好。但是,问题是我还需要将相同的函数应用于这些数据点的不同组合。换句话说,我需要使用仅使用 4、3 和 2 个数据点的不同组合来应用函数。总共有 25 种可能的组合。我想知道最有效的方法是什么?
请看下面我的数据示例:
tte <- c(100,172,434,857,1361) #dependent variable
po <- c(446,385,324,290,280) #independent variable
Results <- myFunction (tte=tte, po=po) # customized function
下面是我如何使用 4 个数据点获得所有可能组合的示例:
tte4 <- combn(tte,4)
po4 <- combn(po,4)
请注意,tte4
的第一列始终与 po4
的第一列一起分析。然后,tte4
的第二列与 po4
的第二列,依此类推。我需要做的是对所有这些组合使用 myFunction
。
我曾尝试通过 for loop
和 mapply
来实现它,但都没有成功。
有什么想法吗?
因为我不知道你想执行什么功能,所以我只是总结了列。此函数采用三个参数:
index = 1 到 tte4 中有多少列的序列(应该与 po4 相同)
x = tte4
y = po4。
然后它应该在两个矩阵上使用该索引来标识您想要的列。在这种情况下,我总结了它们。
tte <- c(100,172,434,857,1361) #dependent variable
po <- c(446,385,324,290,280) #independent variable
results <- function(index, x, y){
i.x <- x[,index]
i.y <- y[,index]
sum(i.x) + sum(i.y)
}
tte4 <- combn(tte, 4)
po4 <- combn(po,4)
index <- 1:ncol(tte4)
sapply(index, results, x = tte4, y = po4)
#[1] 3008 3502 3891 4092 4103
考虑使用 combn
的 simplify=FALSE 参数,然后使用 mapply
(或其包装器 Map
传递向量列表).
tte_list <- combn(tte,4, simplify = FALSE)
po_list <- combn(po, 4, simplify = FALSE)
# MATRIX OR VECTOR RETURN
res_matrix <- mapply(myFunction, tte_list, po_list)
# LIST RETURN
res_list <- Map(myFunction, tte_list, po_list)
我有两个变量(一个独立变量和一个依赖变量),每个变量包含 5 个数据点,我创建了一个 function (x,y)
来为它们拟合不同的模型。这工作得很好。但是,问题是我还需要将相同的函数应用于这些数据点的不同组合。换句话说,我需要使用仅使用 4、3 和 2 个数据点的不同组合来应用函数。总共有 25 种可能的组合。我想知道最有效的方法是什么?
请看下面我的数据示例:
tte <- c(100,172,434,857,1361) #dependent variable
po <- c(446,385,324,290,280) #independent variable
Results <- myFunction (tte=tte, po=po) # customized function
下面是我如何使用 4 个数据点获得所有可能组合的示例:
tte4 <- combn(tte,4)
po4 <- combn(po,4)
请注意,tte4
的第一列始终与 po4
的第一列一起分析。然后,tte4
的第二列与 po4
的第二列,依此类推。我需要做的是对所有这些组合使用 myFunction
。
我曾尝试通过 for loop
和 mapply
来实现它,但都没有成功。
有什么想法吗?
因为我不知道你想执行什么功能,所以我只是总结了列。此函数采用三个参数:
index = 1 到 tte4 中有多少列的序列(应该与 po4 相同)
x = tte4
y = po4。
然后它应该在两个矩阵上使用该索引来标识您想要的列。在这种情况下,我总结了它们。
tte <- c(100,172,434,857,1361) #dependent variable
po <- c(446,385,324,290,280) #independent variable
results <- function(index, x, y){
i.x <- x[,index]
i.y <- y[,index]
sum(i.x) + sum(i.y)
}
tte4 <- combn(tte, 4)
po4 <- combn(po,4)
index <- 1:ncol(tte4)
sapply(index, results, x = tte4, y = po4)
#[1] 3008 3502 3891 4092 4103
考虑使用 combn
的 simplify=FALSE 参数,然后使用 mapply
(或其包装器 Map
传递向量列表).
tte_list <- combn(tte,4, simplify = FALSE)
po_list <- combn(po, 4, simplify = FALSE)
# MATRIX OR VECTOR RETURN
res_matrix <- mapply(myFunction, tte_list, po_list)
# LIST RETURN
res_list <- Map(myFunction, tte_list, po_list)