r - 如何使用 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]] ) ) } )
此功能不适用于完整列表,可能是因为我是 apply 系列的新手。
这个函数返回一个列表位置,而不是我需要的实际值。
Error in df$cand[[x]] : no such index at level 1
解决方案
在这里,我们可以使用Map
而不是sapply
因为sapply
循环遍历每一列,x
匿名函数值是该列的值。它不能用于索引
df$closest <- unlist(Map(function(x, y) which.min(abs(y - x)), df$pred, df$cand))
否则sapply
,我们必须遍历行索引
推荐阅读
- android - Google PanoramaAPI 停止在 Android 11 上运行
- node.js - 如何将 HTTP 请求重定向到 Windows 上的 localhost?
- shell - Unix Shell:根据其他列值更新列值
- push-notification - 在 ejabberd 20.07 版本中安装和配置 mod_offline_post
- dataframe - 从具有左反连接的另一列中存在的列中删除具有值的行
- java - 在java spring应用程序中加载密钥库时嵌套异常
- azure-ad-b2c - B2C 在 ap.error 内容定义中声明解析器
- swift - SwiftUI 和 Combine - 如何创建一个具有与用户选择对应的字段数的表单
- macos - gdb run 创建一个挂起的线程
- algorithm - 这可能吗?二叉树在 O(root logn) 时间内执行 INSERTION