将函数应用于R中参数的不同组合

时间:2018-04-02 19:00:22

标签: r for-loop mapply

我有两个变量(一个独立,一个依赖),每个变量包含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 loopmapply来实现它,但没有取得多大成功。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

由于我不知道你想要执行什么功能,我只是总结了这些列。该函数有三个参数:

index = tte4中有1到多少列的序列(应该与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

答案 1 :(得分:0)

考虑使用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)