首页 > 解决方案 > 如何使用 lapply 在 R 的列表中查找最接近的值?

问题描述

我试图在大型数据框中找到最接近实际观察值的模型预测值。我相信我需要使用 lapply,但我真的不确定。在此先感谢 SE,如果这是对以前帖子的重复,我很抱歉。

df <- data.frame(pred = rnorm(50, mean = 100, sd = 10),
                 cand = I(replicate(50, exp = I(list(rnorm(6, mean = 100, sd = 10))))))

到目前为止,我已经提出了一个单行运行的单行函数,但我有两个问题:

df$closest <- sapply( df, function(x) { which.min( abs( df$pred[x] - df$cand[[x]] ) ) } )
  1. 此功能不适用于完整列表,可能是因为我是 apply 系列的新手。

  2. 这个函数返回一个列表位置,而不是我需要的实际值。

    Error in df$cand[[x]] : no such index at level 1

标签: r

解决方案


在这里,我们可以使用Map而不是sapply因为sapply循环遍历每一列,x匿名函数值是该列的值。它不能用于索引

df$closest <-  unlist(Map(function(x, y) which.min(abs(y - x)), df$pred, df$cand))

否则sapply,我们必须遍历行索引


推荐阅读