替换()与“[<-”?

2023-12-25

我最近偶然发现replace() and "[<-"。它们似乎具有相似的功能,例如"[<-"我可以做这样的事情:

        > x.tst <- array(1:6, c(2,3))
        > s.tst <- array(0, c(2,3))
        > s.tst
             [,1] [,2] [,3]
        [1,]    0    0    0
        [2,]    0    0    0
        > s.tst[1:3] <- 1
        > "[<-"(x.tst, s.tst==1, 0)
             [,1] [,2] [,3]
        [1,]    0    0    5
        [2,]    0    4    6
        > x.tst
             [,1] [,2] [,3]
        [1,]    1    3    5
        [2,]    2    4    6

有人可以帮助澄清差异吗?优点是什么replace vs "[<-"反之亦然?


它们基本上是完全相同的东西。如果你查看replace的源代码,你会看到:

function (x, list, values) 
{
    x[list] <- values
    x
}
<environment: namespace:base>

所以替换只不过是一个包装器[<- :

> replace(x.tst, s.tst==1, 0)
     [,1] [,2] [,3]
[1,]    0    0    5
[2,]    0    4    6

Using [<-如果您需要执行此操作一百万次,则可以加快速度,因为您将失去对包装函数的额外调用。但这确实是微不足道的,所以这是一个选择的问题。我会这样说replace()更具可读性

Btw, x.tst[s.tst==1] <- 0"[<-"(x.tst, s.tst==1, 0)。没有理由使用该构造,除非您想将结果保存在新的数据框中。

为了澄清,正如 @Andrie 指出的,两者都replace() and "[<-"(x.tst, s.tst==1, 0)您将获得整个 x.tst 的副本,其中相关值已更改。所以你可以把它放在一个新对象中。这与x.tst[s.tst==1] <- 0,您可以在其中更改 x.tst 本身的值。请注意,它不会节省内存,因为 R 会在进行操作之前在内部创建 x.tst 的副本。

计时结果:

> system.time(replicate(1e6, replace(x.tst, s.tst==1, 0)))
   user  system elapsed 
  12.73    0.03   12.78 

> system.time(replicate(1e6, "[<-"(x.tst, s.tst==1, 0)))
   user  system elapsed 
   6.42    0.02    6.44 

> system.time(replicate(1e6, x.tst[s.tst==1] <- 0))
   user  system elapsed 
   5.28    0.02    5.32 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

替换()与“[<-”? 的相关文章

  • 带有用户输入的knitr

    我正在使用 R markdown 并使用 Rstudio 来 Knit 我有以下 R markdown 文件 title Untitled author date output html document r setup include F
  • R - 正则表达式错误(PCRE 版本)

    我正在尝试使用koRpus在 R 中在运行 RHEL6 的 Linux 服务器上进行词形还原 上周 当我安装了 MRO Microsoft R Open 3 2 3 时 下面的代码效果很好 library koRpus lw c danci
  • 如何生成向量的所有组合[重复]

    这个问题在这里已经有答案了 假设我有 3 个绿球 2 个橙球和 8 个黄球 我想订购它们 鉴于所有相同颜色的球都是相同的 如何生成所有可能的序列 在 R 中 使用gregmisc 我可以 balls lt c orange orange g
  • R从列表中提取数据框,列名中没有前缀

    我在列表中放置了一个数据框 然后 当尝试将其提取回来时 我得到了该数据帧的所有以列表键为前缀的列名称 有没有办法完全按照最初传递的方式提取数据帧 cols lt c column1 Column2 Column3 df1 lt data f
  • R read_excel:libxls 错误:无法解析文件

    我试图使用 readxl read excel 将 xls 文件读入 R 但它给出了以下错误 Error filepath data xls libxls error Unable to parse file 还尝试了 readxl exc
  • R 中的 NA 替换函数

    我正在尝试替换矩阵中的 NA mat 零 我在用着mat is na mat lt 0 当我有 18946 个变量的 94531 个观察值或更小的矩阵时 效果很好 但我在 22752 个变量的 112039 个观察值的矩阵上尝试它 R 显示
  • 用于清除工作空间和转储存储的 R 全局函数

    我希望创建一个全局函数来清除我的工作区并转储我的内存 我将我的函数称为 cleaner 并希望它执行以下代码 remove list ls gc 我尝试在全局环境中创建该函数 但是当我运行它时 控制台仅打印该函数的文本 在我要获取的函数文件
  • dplyr 中的 Summarize 是否可以不删除数据框中的其他列?

    我有一个包含三列的数据框 我正在尝试进行简单的总结以查找数据框中每个城市的最高温度 但同时保留每个最高温度列出的日期 这是数据框 我们称之为 maxT new ID Date Max TemperatureF 1 TUS 1960 04 0
  • 使用 R 的 flextable 包时,有没有办法将传递给 add_header_lines() 的字符串部分加粗

    我正在使用我喜欢的 flextable 包为 Word 文档创建几个表格 但是 我在将表格标题中的部分文本加粗时遇到了一些麻烦 例如 我希望标题为 Table 1 我的表格标题的其余部分 而不是 表 1 我的表格标题的其余部分 I 找到这个
  • 如何在不循环的情况下添加组ID?

    我有数据框 例如 productid ordernum p1 10 p2 20 p3 30 p4 5 p5 20 p6 8 我想添加另一列 称为 groupid 它将产品按顺序分组在一起 一旦 sum ordernum 达到 30 分配一个
  • 如何更新条件公式?

    让我直接进入示例 考虑以下等式 frml lt formula y a b x z 使用这样的公式规范 例如和AER ivreg 我想更新这个公式 使其显示为 frml2 lt y a b c x z w 但是 我不确定如何更新条件标志之前
  • dplyr,do(),从模型中提取参数而不丢失分组变量

    R 帮助中关于 do 的示例略有不同 by cyl lt group by mtcars cyl models lt by cyl gt do mod lm mpg disp data coefficients lt models gt d
  • 错误:“rjags”的包或命名空间加载失败

    在终端的 conda 环境之一中 我能够成功安装包 rjags 但是 当我在该环境中运行 R 并运行库 rjags 时 出现以下错误 加载所需的包 coda 错误 rjags 的包或命名空间加载失败 rjags 的 loadNamespac
  • 根据另一列中的键累积一列中的值时出现问题

    我有一个看起来像这样的数据框 我需要使用 PROJ ID 列中的字符串创建一个新的值列 并形成 PROJ NAME 列中的值字符串 这里提供的解决方案 根据 r 中另一列的键累积一列中的值 https stackoverflow com q
  • 解析,用三点参数替换

    让我们考虑一个典型的deparse substitute R call f1 lt function u x y print deparse substitute x varU vu varX vx varY vy f1 u varU x
  • fread 将空导入为 NA

    我正在尝试导入带有空白的 csv 读取为 不幸的是他们都读作 NA now 为了更好地演示问题 我还展示了如何NA NA and 都映射到同一事物 除了最底部的示例 这将妨碍简单的解决方法dt is na dt lt gt write cs
  • glmnet 未从 cv.glmnet 收敛 lambda.min

    我跑了20倍cv glmnet套索模型以获得 lambda 的 最佳 值 但是 当我尝试重现结果时glmnet 我收到一个错误 内容如下 Warning messages 1 from glmnet Fortran code error c
  • 使用 dplyr::filter 的整洁方式是什么?

    使用下面的函数调用foo c b 输出以内联方式显示 正确的写作方式是什么df gt filter x gt x 我已经包含了一个使用的示例mutate以整洁的风格与之对比filter foo lt function variables x
  • ggplot2、R 中的单条形条形图

    我有以下数据和代码 gt ddf var1 var2 1 aa 73 2 bb 18 3 cc 9 gt gt dput ddf structure list var1 c aa bb cc var2 c 73L 18L 9L Names
  • 具有 dplyr、tidyverse 和 broom 的相关矩阵 - P 值矩阵

    全部 我想使用以下方法从相关矩阵中获取 p 值dplyr 和 或扫帚包 并同时测试多个变量 我知道其他方法 但 dplyr 对我来说似乎更简单 更直观 此外 dplyr 需要关联每个变量以获得特定的 p 值 这使得该过程更容易 更快 我检查

随机推荐

  • Canvas 或 ImageView 上的 Android 热图

    I want to generate dynamic heatmap just as below on either canvas or imageview I looked into google map heat map API but
  • 从ChartJS 2中的X像素值获取线条的Y值

    我在 Chartjs 中有一个折线图 我想在给定 x 轴像素值的情况下找到线上任意点的 Y 值 My Graph https i stack imgur com 94vKN png 目前 我正在挂钩 afterDatasetsDraw 事件
  • 使用 R 将子图移得更近

    我正在尝试将子图与 R 更紧密地结合在一起 我所做的基本上不重要 只是为了快速重现 代码如下 library igraph library plyr g lt graph ring 10 setEPS postscript out eps
  • 获取“HTTP 错误:404,未找到方法。”在 Firebase Cloud Functions 上运行“firebase 部署 --only 函数”时

    我几个小时以来一直被这个问题困扰 我想也许你们中的一个人以前遇到过这个问题 I get Error HTTP Error 404 Method not found 当我跑步时firebase deploy only functions所以我
  • 我们如何使表格布局双向滚动(水平、垂直)

    我在 XML 文件中定义了一个表 当前设置为垂直滚动 但我也希望它根据需要水平滚动 这是使用的XML代码
  • 使用 SQL Server 身份验证的文件流

    我想知道C 中的文件流是否使用SQL Server身份验证 是否可以通过使用用户名和密码在 Windows 身份验证中使用文件流连接到数据库 是的 必须使用 Windows 身份验证文件流 对付它最好的办法就是模仿它 在类中声明以下方法 D
  • 配置设置和 IoC

    我使用 IoC DI 方法 通常具有参数 这些参数是由最低层 数据库层等 从配置设置 即连接字符串 静态值等 读取的 最好的方法是什么 直接在这个最底层读取 即 string sendGridApiKey ConfigurationMana
  • PMD 的完整形式是什么?

    我在用PMD在我的 Java 项目中进行代码审查 只是想知道 P M D 的缩写是什么 代表 我在谷歌上搜索但找不到任何东西 有人知道吗 在 PMD 项目网站上 http pmd sourceforge net pmd 5 0 4 mean
  • Gradle构建找不到方法

    我正在跟踪开始 Android 开发 https app pluralsight com library courses android start developingPluralsight 课程 我们即将添加测试 说明说要添加添加and
  • 如何使用 JSF/Primefaces 使两个字段中的一个至少为必填字段

    我将 primefaces 与 jsf 一起使用 并且我想至少将两个字段之一设置为必填字段 这意味着如果这两个字段同时为空 将显示错误消息 这是我的代码示例
  • SSIS - RPC 服务器不可用

    我已安装 SQL Server 实例 并在安装向导中选择 Integration Services 但是 当我以 管理员 身份运行 SQL Server Management Studio 时 我可以在下面看到我的实例 数据库引擎 分析服务
  • 将映像包含在可执行 jar 中

    我一整天都在浏览 Stackoverflow 寻找如何做到这一点 但还没有成功 我正在将我制作的快速游戏打包成可执行 jar 但我没有正确引用图像 我只是引用了文件 background ImageIO read new File wood
  • 将 json 对象存储到 Azure blob 存储

    有没有办法存储 json 对象而不将其转换为流 我可以将其转换为流后上传 但是是否有任何方法可以将对象存储为 something json 而不将其转换为流 我现在应该做什么 const azureStorage require azure
  • OOP在大学里被滥用了吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我两年前开始上大学 从那时起我一直听到 首先设计你的课程 有时我真的会问自己 我的解决方案首先应该是一堆对象吗 有人说你看不到它的好处 因为你的
  • 显示 Android 中按下按钮后经过的时间

    我希望能够在 统计 类中的文本视图或计时器中显示自按下另一个类中的按钮以来经过的时间 实现这个最简单的方法是什么 Thanks 设置变量怎么样 System currentTimeMillis 当你膨胀视图时 在 onDestroy 处从当
  • 更改 LazyRow 上的滚动速度

    查看文档LazyRow我想知道是否可以降低滚动速度 看起来像LazyRow继承自ScrollState但我找不到任何关于如何降低滚动速度的有用信息 LazyRow 没有用于自定义滚动速度的参数 因此您必须手动执行此操作 您可以首先捕获类似于
  • Apollo GraphQL - 将 .graphql 架构导入为 typeDefs

    使用 graphql yoga 您可以通过执行以下操作简单地导入模式 typeDefs src schema graphql apollo server express 是否有类似的方法 如果没有 如何从外部导入 typeDefs grap
  • Android XML:RuntimeException:无法解析索引 6 处的属性

    你好亲爱的stackoverflower 在我的项目中 我使用新的 android 设计库 问题是 有一个运行时异常 我正在尝试创建一个浮动按钮 java lang RuntimeException Failed to resolve at
  • 将一个堆栈推入另一个堆栈

    在 C 中 有没有一种方法可以将一个堆栈压入另一个堆栈 而无需迭代堆栈元素 如果没有 我应该使用更好的数据结构吗 在Java中你可以这样做 stack1 addAll stack2 我希望找到 C 的类似物 0 安全解决方案 扩展方法 pu
  • 替换()与“[<-”?

    我最近偶然发现replace and lt 它们似乎具有相似的功能 例如 lt 我可以做这样的事情 gt x tst lt array 1 6 c 2 3 gt s tst lt array 0 c 2 3 gt s tst 1 2 3 1