【问题标题】:Apply a family of functions over nested list -R在嵌套列表上应用一系列函数 -R
【发布时间】:2015-12-16 20:26:25
【问题描述】:

我需要应用一系列形式为 (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 循环之外,还有什么 R 方法?

例如如果输出是矩阵,则元素的示例将是

    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

【问题讨论】:

  • 嘿,pr_list 和 f_list 是什么?
  • 你能举一个你试图生成的输出的例子吗?
  • f_list[[1]] 是一个包含 2 个元素的列表。 linear_function 应该返回 4 个值吗?
  • linear_function 将返回 2 个值 M11 和 M21
  • 我仍然不理解您的示例输入和输出。你能更具体地举个例子吗?

标签: r for-loop mapply


【解决方案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

【讨论】:

    猜你喜欢
    • 2021-07-12
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多