在嵌套列表-R上应用一系列函数

时间:2015-12-16 20:26:26

标签: r for-loop mapply

我需要将一个函数族(a * x + b + c)应用于 嵌套列表,例如以下表格

map_function <- function(x,y){
  return(linear_function(x[1],x[2],x[3],y))
}

linear_function <- function(x1,x2,x3,y){
  g <- sapply(y, function(x){x1*x+x2+x3})%>% min(.)
  return(g)
}

超过两个列表,例如所以当map_function在所有参数上传递时

pr_list <- list(c(1,2,3),c(4,5,6)) and
f_list <- list(c(234,34),c(456,34,567),c(111,222))

它将生成一个3的嵌套列表/矩阵,每个列表中包含2个值。除了使用for循环之外,还有什么方法可以做到?

e.g。如果输出是矩阵,则元素的示例将是

    M11 <- linear_function(pr_list[[1]][1],pr_list[[1]][2],pr_list[[1]][3],f_list[[1]] )
M12 <- linear_function(pr_list[[1]][1],pr_list[[1]][2],pr_list[[1]][3],f_list[[2]] )
M13 <- linear_function(pr_list[[1]][1],pr_list[[1]][2],pr_list[[1]][3],f_list[[3]] )

M21 <- linear_function(pr_list[[2]][1],pr_list[[2]][2],pr_list[[2]][3],f_list[[1]] )
M22 <- linear_function(pr_list[[2]][1],pr_list[[2]][2],pr_list[[2]][3],f_list[[2]] )
M23 <- linear_function(pr_list[[2]][1],pr_list[[2]][2],pr_list[[2]][3],f_list[[3]] )

M <- list(c(M11,M21),c(M12,M22),c(M13,M23))
print(M)

[[1]]
[1]  39 147

[[2]]
[1]  39 147

[[3]]
[1] 116 455

1 个答案:

答案 0 :(得分:1)

这是我对你的最佳猜测。

x <- data.frame(x1 = c(1,2,3), x2 = c(4,5,6))

y <- data.frame(y1 = c(234,34,NA),y2 = c(456,34,567), y3 = c(111,222,NA))

linear_function <- function(x, y){x[[1]]*y +x[[2]]+x[[3]]}

如果像这样应用,会产生以下结果。

> linear_function(x$x1, y)
   y1  y2  y3
1 239 461 116
2  39  39 227
3  NA 572  NA
> linear_function(x$x2, y)
   y1   y2  y3
1 947 1835 455
2 147  147 899
3  NA 2279  NA

如果你想要一个对象。

> z <- lapply(x, linear_function, y)
> z
$x1
   y1  y2  y3
1 239 461 116
2  39  39 227
3  NA 572  NA

$x2
   y1   y2  y3
1 947 1835 455
2 147  147 899
3  NA 2279  NA