lapply / R 中的承诺

2023-12-13

我不确定 R 中的承诺在做什么

如果一个人跑

a = lapply(seq_len(2), function(n) { function() {n}})
b = lapply(seq_len(2), function(n)  {n})

我们可以看到

a[[1]]() # == 2
b[[1]]   # == 1

据我所知,R 使用承诺的对象并惰性地评估其环境中的表达式,但我不明白为什么不同环境为每个函数创建的值不会包含它们自己的 n 值。

[[1]]
function () 
{
    n
}
<environment: 0x7f9b2416ad18>

[[2]]
function () 
{
    n
}
<environment: 0x7f9b2416ab20>

as.list(environment(a[[1]])) 
$n
[1] 2

as.list(environment(a[[2]]))
$n
[1] 2

是否可以通过 lapply 函数以某种方式修复语义?

lapply
function (X, FUN, ...) 
{
    FUN <- match.fun(FUN)
    if (!is.vector(X) || is.object(X)) 
        X <- as.list(X)
    .Internal(lapply(X, FUN))
}
<bytecode: 0x7f9b25150f18>
<environment: namespace:base>

PS:重新聚焦问题

编辑:具体来说,是否可以写一个lapply2通常“强制”参数具有统一行为的函数,如下所示:

pl <- lapply (1:3, function(y) { force(y); function(x) pow(x,y) } )
pl <- lapply2(1:3, function(y) { function(x) pow(x,y) } )

我发现这种形式更容易理解:

f=function(n) {function() {n}}
x=1
a=f(x)
x=2
a()
[1] 2

文档的关键部分是

当调用函数时,参数会被匹配,然后每个 正式的论点必然伴随着承诺。当时的表情是 给出了该正式论证和指向环境的指针 调用函数的位置存储在 Promise 中。

通话结束后a=f(x),函数参数n与名称绑定的承诺x以及指向全球环境的指针.GlobalEnv.

In your lapply示例,匿名函数function(n) { function() {n}}每次都是从全局环境中调用的。这就是为什么列表中的每个元素a得到相同的值n:它来自全球环境。我不明白如何通过重写 lapply 来改变这种行为。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

lapply / R 中的承诺 的相关文章

  • 正则表达式字符串中第一个和最后一个非点的位置

    我希望找到字符串的第一个和最后一个非点元素的位置 理想情况下我想这样做regex在基地R 我已经写过R解决问题的代码 不过 我对一个感兴趣regex解决方案 感谢您的任何建议 这是一个示例数据集和R代码以获得所需的结果 此代码拆分字符串并使
  • 使用 purrr 迭代替换数据帧列中的字符串

    我想用purrr使用以下命令在数据框列上迭代运行多个字符串替换gsub 功能 这是示例数据框 df lt data frame Year 2019 Text c rep a aa 5 rep a bb 3 rep a cc 2 gt df
  • 使用 INotifyPropertyChanged

    有人可以解释一下为什么在 wpf 中使用绑定时需要使用 INotifyPropertyChanged 的 实现吗 我可以在不实现此接口的情况下绑定属性吗 例如我有代码 public class StudentData INotifyProp
  • 时间戳半小时窗口内字段的平均值

    我的数据框有列名Timestamp es看起来像 Timestamp es 2015 04 01 09 07 42 31 2015 04 01 09 08 01 29 5 2015 04 01 09 15 03 18 5 2015 04 0
  • 如何使用 usmap 标记数字而不是名称?

    我知道 usmap 有一个选项label in plot usmap 我想标记一些数字 而不是状态名称 我想 usmap 中应该有与州质心坐标相关的数据 但我不知道如何找到它 如果我能得到 坐标然后我可以用它来标记数字geom text 这
  • kernlab 中 SVM 训练之外的核矩阵计算

    我正在开发一种新算法 该算法可以生成修改后的核矩阵以用于 SVM 训练 但遇到了一个奇怪的问题 出于测试目的 我比较了使用 kernelMatrix 接口和普通内核接口学习的 SVM 模型 例如 Model with kernelMatri
  • Dendextend:关于如何根据定义的组为树状图的标签着色

    我正在尝试使用一个名为 dendextend 的很棒的 R 包来绘制树状图并根据一组先前定义的组为其分支和标签着色 我已阅读您在 Stack Overflow 中的答案以及 dendextend vignette 的常见问题解答 但我仍然不
  • 在 R 中绘制 Likert 变量的堆积条形图

    假设我有一个如下所示的数据框 P Q1 Q2 1 1 4 1 2 2 3 4 3 1 1 4 其中的列告诉我哪个人相应地回答了问题 q1 q2 中的哪一个 这些问题需要按照 4 分李克特量表进行回答 例如 批准 表示 1 稍微批准 表示 2
  • API 请求和curl::curl_fetch_memory(url, handle = handle) 中的错误:SSL 证书问题:证书已过期

    几天前 我运行了代码几个月 没有任何问题 GET url myurl query 今天我遇到一个错误 Error in curl curl fetch memory url handle handle SSL certificate pro
  • 使用 R 选择第一个非 NA 值

    df lt data frame ID c 1 1 1 2 3 3 3 test c NA 5 5 6 4 NA 7 3 NA 10 9 我想创建一个名为 value 的变量 它是每个单独 ID 测试的第一个非 NA 值 对于只有NA的个体
  • r 中训练和测试数据的最小最大缩放/归一化

    我正在创建一个函数 它将训练集和测试集作为其参数 最小 最大缩放 标准化并返回训练集并使用这些same最小值和最小 最大范围的值 标准化并返回测试集 到目前为止 这是我想出的功能 min max scaling lt function tr
  • ggplot2 geom_密度和geom_histogram在一个图中

    如何制作一个所有条形加起来为 1 的直方图 并在适合的上方添加一个密度层 set seed 1234 df lt data frame sex factor rep c F M each 200 weight round c rnorm 2
  • 旋转 Markdown 的表格 pdf 输出

    我想将 pdf 上的表格输出旋转 90 度 我正在使用 Markdown 生成报告并kable循环显示表格 如果可以的话我想继续使用kable因为还有很多其他依赖于它的东西我没有包含在这个 MWE 中 这是一个简单的例子 使用iris数据集
  • 计算 R 中各列的唯一值

    我正在尝试创建一个新变量 其中包含来自两个不同列的字符串值的唯一计数 所以我有这样的东西 例如 A tibble 4 x 2 names partners
  • 投资决策:R中的NPV、IRR、PB计算

    我正在尝试计算不同数量项目的净现值 NPV 内部收益率 IRR 和投资回收期 PB 时间 以评估哪个投资项目提供最佳回报 到目前为止 我可以为每个项目单独计算几行代码 但我想做的是 编写一个函数 它接受一个包含许多不同项目及其现金流的矩阵
  • applyStrategy 错误

    我是R新手 最近运行后遇到以下错误applyStrategy函数来自quantstrat包裹 Error in eval expr envir enclos object signal not found Error in colnames
  • 使用 template.docx 从 Shiny App 编织 Word 文档

    我正在尝试使用 template docx 文件从闪亮的应用程序编写一个 Word 文档 我收到以下错误消息 pandoc exe template docx openBinaryFile 不存在 没有这样的文件或目录 以下 3 个文件当前
  • 如何使用 tidymodels 和工作流集在同一数据集上拟合多个不同的线性模型

    我想评估同一数据集上多个 主要是 线性回归模型的性能 我想也许使用tidymodels包连同workflowsets workflow set 可能会起作用 我按照这个例子here https workflowsets tidymodels
  • 在 Shiny 中的用户会话之间共享反应数据集

    我有一个相当大的反应数据集 该数据集是通过轮询文件然后按预定义的时间间隔读取该文件而派生的 数据更新频繁 需要不断重新加载 诚然 重新加载可以增量完成并附加到 R 中的现有对象 但事实并非如此 然而目前 尽管会话中的数据相同 但此操作是针对
  • 如何使用 dplyr 独立过滤每列的行

    我有以下内容 library tidyverse df lt tibble tribble gene colB colC a 1 2 b 2 3 c 3 4 d 1 1 df gt A tibble 4 x 3 gt gene colB c

随机推荐

  • C# Datagridview:获取组合框列中的选定项目

    我正在开发一个允许用户操作 xml 文件的 GUI 我在 datagridview 中显示 xml 文件 通过 xml 元素按列整齐地组织 我允许用户添加列作为我的项目的扩展 该列被添加到数据集表中 然后更新到我用来显示 xml 文件的 d
  • 如何循环遍历数据表中特定列的值?

    我想循环访问数据表中特定列的值 谁能给出 C 编码吗 DataTable tbl new DataTable foreach DataRow row in tbl Rows object cellData row colName
  • 在 PHP 中使用 exec 命令时可能出现权限问题

    我们有一个小型办公室内联网 用 PHP 构建 在 apache 服务器上 即 WAMP 它允许我们在文件服务器上创建项目文件夹 这是通过使用 shell exec xcopy 命令和以下开关将一组模板文件夹复制到新位置来实现的 e k i
  • 通过 yum 安装 Fiware-Cygnus 时出错

    我正在尝试通过 yum 安装 Fireware Cygnus yum install cygnus ngsi 但中间我遇到了一些错误 Transaction Check Error file usr cygnus init d cygnus
  • 管理 Google Cloud Datastore 中实体内实体的嵌套列表

    我是数据存储新手 我正在尝试创建一个简单的应用程序来跟踪图书借阅 我希望数据库架构如下 books book id name borrowing timestamp user id firstname email users name bo
  • 网格数据绑定问题

    我们的应用程序会生成特定结构的大量结果列表 问题是 如果我想在 DataGrid 中显示它 我必须创建一个 DataTable 并将其设置为将使用内存的网格的数据源 所以我创建了一个绑定列表我创建的一个类 称为myRow 并且在 myRow
  • Java Swing - 如何在 Mac 上双击项目文件以打开我的应用程序并加载文件?

    我创建了一个 Mac Java Swing 应用程序 并在 Info plist 文件中为其设置了文件扩展名 pkkt 因此当双击该文件时 它会打开我的应用程序 当我这样做时 程序运行良好 现在我需要在程序中加载 pkkt 项目 但文件路径
  • CSS 规范中的哪里规定了如何处理具有相同名称的多个属性?

    调试中另一个问题 我想确认我已经正确理解浏览器应该如何处理像这样的声明 background image url image0 jpg background image image set url image1 jpg 1x url ima
  • 使用 ggplot2 将注释放置在绘图中心

    我想在几个 ggplot 对象的中心放置一个注释 我研究并发现了一些类似的问题 例如这里 ggplot2中geom text的相对定位 到目前为止 我找到的唯一答案是操纵绝对范围 例如 y ymax 2 我想在打印到 pdf 之前在循环中添
  • Log4j,将 Web 应用程序配置为使用相对路径

    我有一个 java web 应用程序 必须部署在 Win 或 Linux 计算机上 我现在想添加 log4j 进行日志记录 并且想使用日志文件的相对路径 因为我不想在每次部署时更改文件路径 该容器很可能是 Tomcat 但也不一定 这样做的
  • 指针和字符串文字

    我多次看到以下言论 char ch Hello cout lt
  • 使用哪个 Android 控件?

    我正在迈出 Android 编程的第一步 我的应用程序是在数据库中创建条目 对于此任务 我创建了一个新的活动 一切都很好 但我不太喜欢它的样子 Currently the emulator shows this 我想要一些类似于 新联系人
  • 是扩展“语法”还是扩展“运算符”?

    我听说 两者都称为 传播 syntax 和 传播operator 后者更受欢迎 相关网址MDN 文档表明它最初被称为传播operator但后来改为扩展语法 并且MDN 的运营商列表没有提到它 谷歌似乎建议了这个词operator更受欢迎和接
  • 如何在 Jlist 中添加两列?

    我找到了双JList示例代码 但我需要在一个Jlist 如何在一个表格中添加两列Jlist 我尝试使用ListCellRenderer 但我未能向模型添加元素 Here s代码显示在带有图像的网页中 你的意思是这样的吗 我首先要通读一下如何
  • Elastic Search 忽略映射并且长字段显示为字符串

    我正在向 elasticsearch 添加一个架构 并在该架构中尝试添加一些先前已作为字符串处理的长字段 我创建了一个新索引并重新处理了数据 但在新索引中这些字段仍然显示为字符串 来自索引端点的映射的相关部分 image features
  • 如何从后台弹出片段

    我有一个活动 A 它调用片段 Bf 它又调用片段 Cf 我希望在调用 Cf 时将 Bf 放置在后台堆栈中 以便用户可以导航回它 但是 如果在 Cf 中按下特定按钮 我希望 Bf 从返回堆栈中删除 这可能吗 我看到有一个 popBackSta
  • WCF:数据契约正在转换为消息契约

    我的 WCF 服务导出单个操作 标记有捕获所有操作和回复操作 以便它代表服务的公共入口点 ServiceContract public interface IService OperationContract Action ReplyAct
  • 扩展克隆表行功能 - 更改行 ID

    我有这个小提琴 http jsfiddle net radi8 EwQUW 33 请注意 初始表的定义是 table class reference width 100 border 1 align left thead tr th wid
  • 用户编写的函数内的 purrr + dplyr NSE 问题

    经过大量的试验和错误并咨询以前的答案 例如如何检测是否是裸变量或字符串我想我已经自己完成了大部分需要做的事情 但我渴望了解在将我的 解决方案 投入生产之前我是否做出了一些错误的假设或愚蠢地处理问题 考虑以下数据 library dplyr
  • lapply / R 中的承诺

    我不确定 R 中的承诺在做什么 如果一个人跑 a lapply seq len 2 function n function n b lapply seq len 2 function n n 我们可以看到 a 1 2 b 1 1 据我所知