如何在 R 中使用“<<-”(范围分配)?

2024-04-19

我刚刚读完R 介绍中的范围界定 http://cran.r-project.org/doc/manuals/R-intro.html#Scope,并且我很好奇<<-任务。

该手册展示了一个(非常有趣的)示例<<-,我觉得我明白了。我仍然缺少的是它何时有用的背景。

因此,我很想从您那里读到有关何时使用的示例(或示例链接)<<-可能很有趣/有用。使用它可能有什么危险(它看起来很容易被忽视),以及您可能想分享的任何提示。


<<-与闭包结合使用以维持状态最有用。这是我最近一篇论文的一部分:

闭包是由另一个函数编写的函数。关闭是 所谓因为他们enclose父母的环境 函数,并且可以访问该函数中的所有变量和参数 功能。这很有用,因为它允许我们有两个级别 参数。一级参数(父级)控制如何 功能有效。另一个级别(子级)负责这项工作。这 下面的例子展示了如何使用这个想法来生成一个家族 幂函数。父函数 (power) 创建子函数 (square and cube)实际上是在做艰苦的工作。

power <- function(exponent) {
  function(x) x ^ exponent
}

square <- power(2)
square(2) # -> [1] 4
square(4) # -> [1] 16

cube <- power(3)
cube(2) # -> [1] 8
cube(4) # -> [1] 64

在两个级别管理变量的能力还可以通过允许函数修改其父环境中的变量来维护跨函数调用的状态。管理不同级别变量的关键是双箭头赋值运算符<<-。与通常的单箭头分配不同(<-)始终适用于当前级别,双箭头运算符可以修改父级别中的变量。

这使得可以维护一个记录函数被调用次数的计数器,如以下示例所示。每一次new_counter运行时,它创建一个环境,初始化计数器i在此环境中,然后创建一个新函数。

new_counter <- function() {
  i <- 0
  function() {
    # do something useful, then ...
    i <<- i + 1
    i
  }
}

新函数是一个闭包,它的环境是封闭环境。当关闭时counter_one and counter_two运行时,每个都会修改其封闭环境中的计数器,然后返回当前计数。

counter_one <- new_counter()
counter_two <- new_counter()

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

如何在 R 中使用“<<-”(范围分配)? 的相关文章

  • 如何融合颜色和形状?

    当我有一个超过 6 个值的变量时 我的麻烦就开始了 因为这是 ggplot2 中 scale shape 函数的当前最大值 由于这个问题 我尝试使用另一个变量来解决这个问题 我只是将原始变量的长度包裹起来 这是我的示例代码 dataf lt
  • 按列分组的数据帧上 R 中的行之间的差异

    我希望通过 app name 获得不同版本的计数差异 我的数据集如下所示 app name version id count difference 这是数据集 data structure list app name structure c
  • R Data.Table 创建带有条件的变量

    我需要在下面的数据集中创建一个新变量 A X a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10 The newvar如果X等于 2 5 7 或 9 否则 newvar应该是 0 Code dt1 lt dat
  • 使用 R 读取和转换二进制原始数据

    我有一个file https drive google com file d 0BxMpk0nhnJy6SFhxd2xuMzJYYlk edit usp sharing其中包含原始 二进制数据和 ascii 它包含一个时间戳和一个代表速度的
  • 获取所有矩阵列逐元素乘积对的快速方法

    假设我有一个数字matrix set seed 1 mat lt matrix rnorm 1000 ncol 100 我想生成所有向量 它们是中所有唯一向量对的逐元素乘积的结果mat 我们如何改进下面的代码 all pairs lt t
  • 使用 R 从字符串中提取函数参数

    最好使用stringr包 我想创建一个函数extract 以字符串向量作为参数 vec lt c div span icon hospital user i18n t Enrolments or i18n t Paper a string
  • 抑制 R 中的错​​误消息

    我正在 R 中运行模拟研究 有时 我的模拟研究会产生错误消息 当我在函数中实现模拟研究时 当出现此错误消息时模拟停止 我知道抑制错误是不好的做法 但此时对我来说 除了抑制错误然后继续下一个模拟 直到达到我喜欢运行的模拟总数为止 没有其他选择
  • 编写健壮的 R 代码:命名空间、屏蔽和使用 `::` 运算符

    简洁版本 对于那些不想阅读我的 案例 的人来说 这就是本质 最小化新包破坏现有代码 即编写您编写的代码 的机会的推荐方法是什么尽可能坚固 充分利用该功能的推荐方法是什么 命名空间机制 when a just using贡献的软件包 比如在一
  • Shiny可以识别用鼠标选择的文本(突出显示的文本)吗?

    我需要用户将文本片段分配给 Shiny 中的类别或 代码 基本上 我希望用户突出显示输出中的文本 在下面的示例中 来自table or text输出 然后按一个按钮 code 并将选定的文本分配给应用程序内的对象 在下面的应用程序中 所选文
  • 将 read.csv 与符号链接文件一起使用

    我正在尝试做什么 我的源文件非常大 我想避免将其复制到其他文件夹中 我决定创建一个指向大文件的符号链接并想使用read csv读取文件 文件夹结构 项目1 数据 源文件 csv 项目2 数据 别名到源文件 csv 什么地方出了错 读取源文件
  • 使用starts_with() 将 NA 替换为 0

    我正在尝试替换我的一组特定列的 NA 值tibble 这些列都以相同的前缀开头 所以我想知道是否有一种简洁的方法来使用starts with 函数从dplyr包可以让我做到这一点 我已经看到了有关 SO 的其他几个问题 但是它们都需要使用特
  • 在 R 中将时间间隔数据扩展为天数

    假设我有如下所示的数据 interval id indiv id role start date end date 1 1 A 2006 05 01 2006 06 16 2 1 B 2006 06 16 2006 10 16 3 1 A
  • 在 mutate 和 across 之后使用 ~separate

    目的是将所有物种 setosa 行转换为一行 setosa 这是一个最小的示例 实际上有更多列和更多组 我有这个数据框 head iris 2 gt select 1 2 5 gt group by Species Sepal Length
  • 使用管道语法处理模型列表

    我经常喜欢拟合和检查与 R 数据框中的两个变量相关的多个模型 我可以使用如下语法来做到这一点 require tidyverse require broom models lt list hp exp cyl hp cyl map df m
  • 连接多个用户的 R 闪亮会话

    最小可重现示例 library shiny ui lt fluidPage actionButton button1 Run 1 actionButton button2 Run 2 server lt function session i
  • jupyter 中的 r 图形 - 无法启动 png() 设备

    我在 Jupyter 中使用 R 但无法在笔记本本身中绘制图表 这是一个可重现的示例 set seed 123 mat as matrix x rnorm 100 y rnorm 100 plot mat 在朱皮特中 Error in pn
  • 如何从R中的日期中提取月份

    我正在使用lubridate封装并应用month从日期中提取月份的函数 我在日期字段上运行了 str 命令 得到了 Factor w 9498 levels 01 01 1979 01 01 1980 5305 1 1 1 1 1 1 1
  • 访问 R 工作区中的数据[重复]

    这个问题在这里已经有答案了 我是自学 R 的 可能有一些非常基本的东西我可能不熟悉 如果是这样我道歉 我正在尝试访问外部来源提供给我的数据 它作为一个工作空间出现 我的流程如下 gt ls 1 2003OHT HR gt attach 20
  • ggplot 图例标签内的希腊字母、符号和换行符

    我在尝试着 有换行符 自动或强制 对齐文本 左对齐或左右对齐 有希腊字母和百分号 在 gglot 图例标签内 我尝试了几种方法 但我似乎无法将我读到的所有技巧结合起来 我可以通过插入来换行 n进入标签 但这似乎不适用于希腊字母 不适用于图例
  • 使用自定义渐变填充直方图箱

    我想在 R 和 ggplot2 中创建一个直方图 其中根据连续的 x 值填充箱 大多数教程仅通过离散值或密度 计数进行着色 下列的这个例子 https stackoverflow com questions 40284227 how to

随机推荐

  • Node.js 或 Erlang

    当谈到它们可以处理的并发级别时 我真的很喜欢这些工具 Erlang OTP 看起来是更稳定的解决方案 但需要更多的学习和深入研究函数式语言范例 看起来 Erlang OTP 在多核 CPU 方面做得更好 如果我错了 请纠正我 但我应该选择哪
  • 在 Xcode 4 中本地化 iPhone 应用程序名称

    当我选择 Info plist 文件以便本地化应用程序名称并尝试构建项目时 构建失败并显示错误 提示找不到 Info plist 文件 如果我将 Info plist 文件路径更改为PROJECTNAME en lproj Info pli
  • 如何在 ASP.net MVC 中正确执行异步方法?

    如何从控制器方法内执行异步方法并返回 HttpStatusCodeResult 200 而异步委托不会提前终止其执行 我正在开发一个 asp net 应用程序 我的家庭控制器的一个操作需要很长时间才能运行 10 30 秒 我想返回 Http
  • 求给定数组的每个 (n-1) 个子集的乘积

    很抱歉删除了原来的问题 这里是 我们有一个包含 n 个整数的包或数组 我们需要找到每个 n 1 个子集的乘积 例如 S 1 0 3 6 ps 1 0 3 6 0 ps 2 1 3 6 18 ETC 经过讨论 我们需要处理三种情况 如下所示
  • 交换 javascript 数组中的两个项目[重复]

    这个问题在这里已经有答案了 可能的重复 Javascript 交换数组元素 https stackoverflow com questions 872310 javascript swap array elements 我有一个像这样的数组
  • JQuery Cascade 插件下拉列表不刷新

    我正在使用基于 JQuery 的级联插件 https web archive org web 20111206072619 http plugins jquery com 80 project cascade 可能它有效 但我发现它有很多问
  • 在 Xcode11 Beta 4 中将 String(format: , args) 与 SwiftUI 一起使用时出错

    升级到 Xcode 11 Beta 4 后 我在使用时开始看到错误String format args with State财产 请参阅下面的代码 第二Text行抛出错误 表达式类型 String 在没有更多上下文的情况下不明确 while
  • startAfter 在 Firestore android 中不起作用

    我创建了一个类似测验的应用程序 一次提取 10 个问题 如果用户得到 8 分 满分 10 分 那么我会获取接下来的 10 个问题 但开始之后总是给出相同的回应 val questionCollectionRef db collection
  • 使用 C# 使用 Google OAuth 2.0 登录

    我想允许用户使用登录Gmail 因此 我在 google 上搜索并获得了许多示例 但所有示例都使用 OpenID 而且我检查了 Google 文档 他们已停止 OpenID 的新域注册 从现在开始 开发人员将需要使用 OAuth API 我
  • 如何杀死内核模块中的等待队列?

    我是内核模块的新手 使用等待队列 我阻塞线程 直到缓冲区有数据 使用hrtimer 我定期唤醒队列 现在 问题是即使在我删除内核模块之后 我也可以看到该进程 thread1 仍在运行 我认为问题在于等待队列永远等待并且进程在这里被阻塞 请帮
  • 将n个元素插入到数组末尾的时间复杂度是多少?

    我知道向数组插入一个元素需要一个恒定的时间 让我们说c 我尝试过的 用于插入n个元素time c c c n times nc 我想问是n的大O还是o 1 是的 添加n元素需要 O n 时间 但添加单个项目则不是 O 1 它是摊销的 O 1
  • 如何获取http重定向状态码

    我想记录 301 与 302 但找不到读取 Client Do Get doFollowingRedirects CheckRedirect 中的响应状态代码的方法 我必须自己实施重定向才能实现此目的吗 The http Client ht
  • 如何在 Spark 中引入 Row 中的 schema?

    在 Row Java API 中 有 row schema 但没有 row set StructType schema 我也尝试 RowFactory create objects 但我不知道如何继续 UPDATE 问题是当我修改工人的结构
  • 每秒改变背景颜色

    function change i var doc document getElementById background var color black blue brown green for i 0 i
  • 如何使用 android RecyclerView 创建自动调整网格布局

    我想使用 RecyclerView 创建自动调整列 如上图网格布局 At last I have done it using FlexboxLayout 渐变导入 编译 com google android flexbox 0 3 1 pu
  • 如何从 JavaScript 中的日期对象获取上周的第一天?

    给定一个日期对象 如何获取上周的第一天 This Datejs库 http groups google com group datejs browse thread thread d1a5323a95c48525看起来它可以相对容易地完成这
  • 自定义 Flask-Admin 表单,其中一些选择字段选项根据另一个选择字段设置

    我正在尝试使用 Flask Admin 为下面所示的模型 Matriline 创建一个创建 编辑表单 该模型有一个字符串字段 name 和一个字段 pod id 该字段具有对另一个模型 Pod 的外键约束 该模型本身也有一个外键字段氏族模型
  • 如何忽略 OpenCV python 中的内部黑色轮廓?

    在上图中 我只需要以下轮廓 8 7 0 2 4 里面每隔一个轮廓都是黑色的空盒子 有没有办法使用 cv2 RETR TREE 自动提取此类轮廓 cv2 RETR EXTERNAL 将忽略我实际需要的 2 和 4 gt gt heirarch
  • 使用环境变量在 AWS Elastic Beanstalk 上通过 django 运行 celery

    我想使用我的 Django 应用程序在 AWS Elastic Beanstalk 上运行 celery 我遵循了 yellowcap 的这个很棒的答案 如何使用 AWS Elastic Beanstalk 运行工作线程 https sta
  • 如何在 R 中使用“<<-”(范围分配)?

    我刚刚读完R 介绍中的范围界定 http cran r project org doc manuals R intro html Scope 并且我很好奇 lt lt 任务 该手册展示了一个 非常有趣的 示例 lt lt 我觉得我明白了 我