R范围:在没有本地环境的情况下强制函数中的变量替换

2023-12-11

我在循环中定义函数,并尝试强制评估循环变量,而不必携带私有环境。

示例:一组函数handlers$h1, handlers$h2, ..., handlers$h6只是将 1, 2, ..., 6 传递给另一个函数,如下所示:

handlers <- list()
for (i in 1:6) {
    handlers[[paste0('h', i)]] <- function () {
        message(i) # <-- example
    }
}

So handlers$h1()应消息1,handlers$h2()应消息 2,...

相反,所有函数都返回6, the current的价值i.

为了解决这个问题,我可以使用闭包作为在这个问题中指定

msg <- function(i) {
    force(i)
    function () { message(i) }
}

for (i in 1:6) {
    handlers[[paste0('h', i)]] <- msg(i)
}

现在每个功能都按预期工作,but每个函数都必须携带自己的环境:

handlers$h1
# function () { message(i) }
# <environment: 0x9342b80>

我怎样才能做到这一点handlers$h1 prints function () { message(1) },即评估i并将其直接替换到定义中,从而消除对环境的需要?

我能想到的唯一方法是:

  • use eval(我不想做的事情);
  • 手工写出每个定义,并直接替换 1-6(在只有 6 个函数的情况下很好,但通常不可扩展)

以下是一些使用的方法body<-

你可以使用bquote

handlers <- list()

for (i in 1:6) {
  handlers[[paste0('h', i)]] <- function () {}
  body( handlers[[paste0('h', i)]]) <- bquote(message(.(i)))
}

handlers$h1
## function () 
##   message(1L)

or substitute

for (i in 1:6) {
  handlers[[paste0('h', i)]] <- function () {}
  body( handlers[[paste0('h', i)]]) <- substitute(message(i), list(i=i))
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R范围:在没有本地环境的情况下强制函数中的变量替换 的相关文章

  • 我无法下载 R 中的 reshape2 包 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我在尝试安装 R 包时收到此响应 gt installed packages reshape2 Package LibPath V
  • R - Plm 和 lm - 固定效应

    我有一个平衡面板数据集 df 本质上由三个变量组成 A B and Y 对于一堆独特识别的区域来说 它会随着时间的推移而变化 我想运行一个回归 其中包括区域 下面等式中的区域 和时间 年份 固定效应 如果我没记错的话 我可以通过不同的方式来
  • 如何使用 R 计算成为列表中中位数的概率?

    假设我有以下数据集 其中显示了假设实验的每个状态的三个观察结果的列表 state lt c Iowa Minnesota Illinois outcome lt list c 5 11 11 c 3 12 8 c 9 14 2 dat lt
  • Purrr::map_df() 删除 NULL 行

    使用时purrr map df 我偶尔会传递一个数据框列表 其中一些项目是NULL 当我做 map df 返回行数少于原始列表的数据框 我想发生的事情是这样的map df calls dplyr bind rows 它忽略了NULL价值观
  • 以引用透明的方式从函数的省略号参数中提取符号

    事情又发生了 我正要按下发布答案按钮的问题被删除了 我正在寻找一种方法来从函数的省略号参数中提取绑定到符号的对象的值以及符号 也就是说 我试图以引用透明的方式从省略号中提取符号 我尝试过使用替代品和lazy dots 但没有成功 funct
  • 使用 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 中另一个 data.frame 中的权重

    我有两个data frames df and weights 代码如下 df看起来像这样 id a b d EE f 1 this 0 23421153 0 02324956 0 5457353 0 73068586 0 5642554 2
  • 只读取选定的列

    谁能告诉我如何仅读取下面每年数据的前 6 个月 7 列 例如使用read table Year Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 2009 41 27 25 31 31 39 2
  • 在 r 中的 group_by 之后建模后取消列表列的嵌套

    我想对所有组进行线性回归group by 将模型系数保存在列表列中 然后使用 unnest 扩展列表列 这里我用的是mtcars以数据集为例 注 我想用do here becausebroom tidy 不适用于所有型号 mtcars gt
  • 文本挖掘 pdf 文件/词频问题

    我正在尝试挖掘一篇具有丰富 pdf 编码和图表的文章的 pdf 我注意到 当我挖掘一些 pdf 文档时 我得到的高频词是 phi taeoe toe sigma gamma 等 它与某些 pdf 文档配合良好 但与其他文档配合使用时却得到这
  • 旋转 Markdown 的表格 pdf 输出

    我想将 pdf 上的表格输出旋转 90 度 我正在使用 Markdown 生成报告并kable循环显示表格 如果可以的话我想继续使用kable因为还有很多其他依赖于它的东西我没有包含在这个 MWE 中 这是一个简单的例子 使用iris数据集
  • 为什么 R 更新后 sim_slopes() 中会出现此错误?

    我正在尝试使用 交互 包来创建简单斜率的约翰逊 尼曼图 但是 当尝试运行 sim slopes 函数时 出现以下错误 直到我将R更新到4 2 2 我才没有遇到这个问题 我使用的是 macOS Ventura 13 1 Error class
  • 使用 ggmap 截断密度多边形

    我在使用 R ggmap 绘制密度图时遇到问题 我的数据如下所示 gt head W date lat lon dist 1 2010 01 01 31 942 86 659 292 415 2 2010 01 10 32 970 84 1
  • 将不均匀的层次列表转换为数据框

    我认为还没有有人问过这个问题 但是有没有一种方法可以将具有多个级别和不均匀结构的列表的信息组合成 长 格式的数据帧 具体来说 library XML library plyr xml inning lt http gd2 mlb com c
  • R:如何获取该月的周数

    我是 R 新手 我想要该日期所属月份的周数 通过使用以下代码 gt CurrentDate lt Sys Date gt Week Number lt format CurrentDate format U gt Week Number 3
  • R“错误:“}”中出现意外的“}”[重复]

    这个问题在这里已经有答案了 我有一个字符串变量 对于缺少数据的情况 它具有 空值 我想将 空值 重新编码为缺失 而不是说 空值 我正在尝试编写一个循环来删除这些 空值 条目 但我不断收到错误 错误 中出现意外的 for row in dat
  • 条件字体颜色 R Markdown

    我无法找到一种方法来根据变量的值 gt 0 0 或 r setup include FALSE x lt 4 This is an R Markdown document r if x gt 0 textcolor red Markdown
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 如何修复 R 中 Kaplan Meier 图的风险表计算错误

    以下是一个数据帧 其中 6 个参与者中的每一个都有唯一的 record ID 我想绘制一个生存分析图 其中包含感兴趣事件的复发以及在时间间隔 tstart 到 tstop 内 暴露 药物剂量 数值变量 的时间依赖性协变量 每个参与者的最大
  • 在 ifelse() 语句内部和外部运行一行时的不同输出

    我正在尝试运行一个简单的命令 但不知道为什么在内部和外部运行它时输出不同ifelse 功能 函数条件评估为FALSE 所以输出应该完全相同 但是 单独运行时 输出为0 0 1 1 0 1 0 1 NA 根据需要 但是从ifelse 函数 输

随机推荐

  • 忽略 TextField SwiftUI 组合中输入中的左侧空格

    我正在传递给 TextField 发布的变量 TextField First name text state firstName 我想控制估算 如果从左侧输入 则忽略空格 我可以在哪里以及如何做 可以使用代理绑定来完成 如下所示 TextF
  • 在 Mercurial 中指定编辑器

    一般来说 如果我有一个 W 类型的自定义文件 并且想要使用自定义应用程序 编辑器 X 打开 查看它 当我想要编辑 查看该文件时 如何设置 Hg 来调用应用程序 X 具体示例 我使用 TortoiseHg 来跟踪一组文件 这些文件是由自定义应
  • 可以观察到分组和去抖动吗?

    我有一个可观察的对象 它发出一个包含一些参数的对象 在对象中 参数之一 称为optionId 明确标识一个选项 我想消除该发射的所有实例 然而 如果一个新的optionId出现 我想启动一个新的时钟 并开始一个新的反跳 这是我正在寻找的示例
  • 如何在 Swift 中创建自定义 getter 方法?

    我正在尝试使用以下代码为我的属性创建自定义设置方法 var myProperty String get if CONDITION1 return CONDITION1 STRING else if CONDITION2 return CON
  • “adb install”返回错误:协议错误(无状态)

    我已经创建并运行了几个 Android 模拟器 现在我想在它们上安装应用程序 这是我多次尝试的故事 adb s emulator 5562 install xxx apk daemon not running starting it now
  • 标题大写

    我正在尝试编写一种将标题大写的方法 它不应将每个单词都大写 而应仅将大单词大写 如果您愿意的话 有时 它必须将每个单词大写 也许我需要为这些小词添加一个例外 这是 Ruby 教程的一部分 我无法使用 Railstitleize方法 这是我到
  • R - 使用 par() 创建 ggplot 绘图网格 - 未按预期工作[重复]

    这个问题在这里已经有答案了 我有一些数据看起来像这样 Generate example data exampleData lt data frame Month sample 1 5 500 replace T Product sample
  • WPF 和 NotifyPropertyChanged 来自不同的线程

    我对 WPF 非常有经验 但有一件事困扰着我 我正在使用 ReactiveUI 引发 INotifyPropertyChanged 事件 我有两个类似的地方 public UiModel UiModel get return uiModel
  • 使用 Odeint 求解复矩阵微分方程

    我想求解矩阵微分方程 像这个 import numpy as np from scipy integrate import odeint def deriv A t Ab return np dot Ab A Ab np array 0 2
  • 使用c#读取Word文档

    我需要从一个特定的点开始阅读word文档 该关键字取自下拉组合框 关键字类似于 blah blah blah 001 所以 我只需要阅读从该关键字到下一个标题的内容 我用它来逐行读取标题编号 但标题编号不起作用 string headNum
  • C++ 睡眠函数

    我正在尝试执行一个有点准确的睡眠功能 我测量了我的睡眠功能睡了多长时间 并将它们并排放置 下面示例的格式为 预期毫秒 结果毫秒 我尝试了很多选择 但仍然找不到解决方案 以下是我尝试过的路线 Route 1 Sleep
  • 合并子目录中的 git 存储库

    我想将远程 git 存储库合并到我的工作 git 存储库中作为它的子目录 我希望生成的存储库包含两个存储库的合并历史记录 并且合并存储库的每个文件都保留其历史记录 就像在远程存储库中一样 我尝试使用子树策略 如中提到的如何使用子树合并策略
  • 致命错误:c:\wamp\www\drupal2\includes\common.inc 第 551 行超出最大执行时间 30 秒

    当我进入 drupal 6 中的管理选项时 我的浏览器上出现以下错误 致命错误 超过了最大执行时间 30 秒 c wamp www drupal2 includes common inc 第 551 行 我在 drupal 6 站点 所有
  • jQuery 在 div 标签内添加图像

    我有一个 div 标签 div Where is the image div 我想在 div 内添加一个图像标签 最终结果 div img src theImg png Where is the image div 您是否尝试过以下操作 t
  • LibGdx 2 半屏“按钮”

    Android 所以我是 LibGdx 的新手 我正在尝试编写这个 chrome 恐龙迷你游戏 我想在用户触摸屏幕左侧时执行操作 1 并在触摸屏幕右侧时执行操作 2手边的屏幕 我该怎么办 您可以通过在游戏循环中的某处使用以下代码来检测被触摸
  • cs50的tideman lock_paiors函数问题

    大家好 我的 pset3 上的锁对功能有问题 tideman 希望得到一些反馈 bool checkcycle int from int to if from to return true int i for i 0 i lt candid
  • IIS 6.0 中是否有相当于 Apache 的 auto_prepend_file 的功能

    在 LAMP 堆栈上我可以使用 gt php value auto prepend file bootstrap php 在 htaccess 中引导一系列我想在处理任何页面之前执行的命令 是否可以在 IIS 6 0 中执行相同的操作 更新
  • Java 正则表达式转大写

    所以我有一个像这样的字符串 2000cc 车辆翻新发动机 我想把它变成 2000CC 车辆翻新发动机 2000CC 上的大写字母为 cc 我显然做不到text replaceAll cc CC 因为它将用大写版本替换所有出现的 cc 因此单
  • 检测编译后的perl脚本是否动态加载模块

    我正在使用 Strawberry Perl 运行 Windows 10 我用PAR 打包机模块来制作我的一些 Perl 脚本的可执行版本 我发现有些模块例如XML LibXML 需要安装 Perl 才能运行可执行文件 由于我是为没有 Per
  • R范围:在没有本地环境的情况下强制函数中的变量替换

    我在循环中定义函数 并尝试强制评估循环变量 而不必携带私有环境 示例 一组函数handlers h1 handlers h2 handlers h6只是将 1 2 6 传递给另一个函数 如下所示 handlers lt list for i