在提取/替换操作期间保留对象属性的方法

2024-04-02

最近我在我的R代码中遇到了以下问题。在接受数据框作为参数的函数中,我需要添加(或替换,如果存在)一列,其中包含根据数据框原始列的值计算的数据。我编写了代码,但测试显示数据框提取/替换操作,我用过,结果是对象的特殊(用户定义)属性丢失.

在意识到这一点并通过阅读 R 文档确认该行为之后(http://stat.ethz.ch/R-manual/R-patched/library/base/html/Extract.html http://stat.ethz.ch/R-manual/R-patched/library/base/html/Extract.html),我决定非常简单地解决这个问题 - 通过saving提取/替换操作之前的属性和恢复此后他们:

myTransformationFunction <- function (data) {

  # save object's attributes
  attrs <- attributes(data)

  <data frame transformations; involves extract/replace operations on `data`>

  # restore the attributes
  attributes(data) <- attrs

  return (data)
}

这种方法奏效了。然而,无意中,我看到了另一篇 R 文档(http://stat.ethz.ch/R-manual/R-patched/library/base/html/Extract.data.frame.html http://stat.ethz.ch/R-manual/R-patched/library/base/html/Extract.data.frame.html),恕我直言,它提供了一个有趣的(并且可能是一个更通用的?)替代方法解决同样的问题:

## keeping special attributes: use a class with a
## "as.data.frame" and "[" method:

as.data.frame.avector <- as.data.frame.vector

`[.avector` <- function(x,i,...) {
  r <- NextMethod("[")
  mostattributes(r) <- attributes(x)
  r
}

d <- data.frame(i = 0:7, f = gl(2,4),
                u = structure(11:18, unit = "kg", class = "avector"))
str(d[2:4, -1]) # 'u' keeps its "unit"

如果这里的人们可以通过以下方式提供帮助,我将非常感激:

  1. 比较上述两种方法,如果它们具有可比性(我意识到定义的第二种方法是针对数据帧的,但我怀疑它可以推广到任何对象);

  2. 解释第二种方法中函数定义的语法和含义,特别是as.data.frame.avector,以及这条线的目的是什么as.data.frame.avector <- as.data.frame.vector.


我正在回答我自己的问题,因为我刚刚发现了一个SO问题(如何从 data.frame 中删除一行而不丢失属性 https://stackoverflow.com/questions/10404224/how-to-delete-a-row-from-a-data-frame-without-losing-the-attributes),答案涵盖most我上面提出的问题。但是,附加说明(对于 R 初学者) 为了第二种方法仍然会受到赞赏。

UPDATE:

在对以下 SO 问题的回答中提出了该问题的另一种解决方案:索引操作删除属性 https://stackoverflow.com/questions/13432519/indexing-operation-removes-attributes。然而,就我个人而言,我更喜欢这种基于创建新类的方法,因为恕我直言,它在语义上更清晰。

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

在提取/替换操作期间保留对象属性的方法 的相关文章

  • 如何将对象转换为传递给函数的类型?

    这不会编译 但我想做的只是将对象转换为传递给函数的 t public void My Func Object input Type t t object ab TypeDescriptor GetConverter t ConvertFro
  • 如何更改 Quarto pptx 中的字体格式

    我正在 R 中使用 Quarto 创建 pptx 要更改我尝试更改的默认字体格式mainfont范围 但是当我渲染它时 最终的 pptx 文件具有默认字体 Calibri 这是我的文件 YAML 将 Quarto 文件渲染为 pptx 时如
  • 根据列A:列B范围内的值查找数据框中的相应行[重复]

    这个问题在这里已经有答案了 我有一个 data frame 和一个向量 例如 df data frame id 1 3 start c 1 1000 16000 end c 100 1100 16100 info c a b c vec c
  • r - 从我的应用程序下载shinyapps代码

    我正在尝试从shinyapps io 在另一台电脑上下载我的shiny 应用程序代码 我按照这个例子 https support rstudio com hc en us articles 204536588 从 shinyapps io下
  • 以计数矩阵作为响应的多项式

    根据帮助multinom 包裹nnet 响应应该是一个因子或具有 K 列的矩阵 它将被解释为每个 K 类的计数 我尝试在第二种情况下使用此函数 但出现错误 这是我所做的示例代码 response lt matrix round runif
  • 我可以在 R 中并行读取 1 个大 CSV 文件吗? [复制]

    这个问题在这里已经有答案了 我有一个很大的 csv 文件 需要很长时间才能阅读 我可以使用 parallel 或相关的包在 R 中并行读取此内容吗 我尝试过使用 mclapply 但它不起作用 根据OP的评论 fread来自data tab
  • 使用 plyr daply 将数据帧转换为矩阵

    我正在尝试使用daply函数在plyr包 但我无法让它正确输出 尽管组成矩阵的变量是数字 但矩阵的元素是列表 而不是变量本身 例如 以下是一小部分数据 Month Vehicle Samples 1 Oct 10 31057 256 2 O
  • 如何访问 Javascript 对象的第一个属性?

    有没有一种优雅的方式来访问对象的第一个属性 您不知道您的房产名称的地方 不使用类似的循环for in或者 jQuery 的 each 例如 我需要访问foo1不知道 foo1 名称的对象 var example foo1 stuff1 fo
  • 如何使用 tidyr 将向量中字符串中的每个字符分隔到一列中

    我想将向量中的每个字符串分成列 但我做不到 library tidyr library dplyr df lt data frame x c abe bas dds eer df gt separate x c A B C sep 1 我想
  • 计算数据框中每一行的 R 条件运行总和

    我想创建一个等于 data Rating 的运行总和的列 假设第 3 列和第 4 列中有两个条件成立 特别是 data Year 换句话说 这应该计算直到上一年为止每个 id 的评分累积总和 它应该对数据框中的每一行 大约 50 000 行
  • 如何将环境变量传递给shinyapps

    我想将安全参数传递给shinyapps io部署 以便我的应用程序可以通过以下方式获取它们 Sys getenv PASSWORD X 我找不到任何相关内容deployApp函数在rsconnect包裹 您可以使用Renviron网站 or
  • SQL Server RODBC 连接

    有没有人有使用 RODBC 并连接到 MS SQL Server 2005 或 2008 的连接字符串示例 谢谢 library RODBC dbhandle lt odbcDriverConnect driver SQL Server s
  • 如何正确调整 R 中 ggplot 的各个方面的大小,包括图例?

    我在 ggplot2 中制作散点图 然后使用 ggsave 导出特定宽度和高度的 PDF 但是 图形图例永远不会使用 ggsave 正确调整大小 其边框不会留在绘图内 是否有另一种方法可以同时调整 ggplot 所有部分的大小以便于导出 我
  • “过滤”JSON 以获得唯一键并获取所有相关值

    找到一个组中所有可能的相关值的最佳方法是什么 var table group a stuff new group a stuff old group b stuff newOld group b stuff old group c stuf
  • R Shiny UI 子选项复选框?

    我有一个基本的 RShiny 应用程序 它有一个反应式复选框 它根据复选框中选择的数据 df 列 绘制时间序列数据 我当前的代码生成一个带有复选框输入的 UI 如下所示 Load R packages library shiny libra
  • RPostgreSQL 无法关闭连接

    我有一个闪亮的应用程序 使用它连接到数据库RPostgreSQL 在应用程序结束时 连接关闭 驱动程序应该被卸载 但我收到错误 警告我连接未关闭 代码看起来像这样 in the app R file but not in the serve
  • data.table:从不存在的列到现有列的“get”失败,静默失败

    gt d lt data table x 1 5 gt d x 6 y get i 9 Error in get i 9 object i 9 not found gt d y 1 add a new column y gt d x 6 y
  • 通过 rpy 将 SPSS 文件(.sav)导入 pandas 时如何保留标签?

    我正在寻找使用 SPSS 文件 sav pandas 在没有 SPSS 程序的情况下 典型文件转换为 csv 后的样子如下 在调查前两行的含义时 我不知道 SPSS 似乎第一行包含Labels 而第二行包含VarNames 当我将文件带入
  • R 在读取文件时添加额外的数字

    我一直在尝试读取一个包含日期字段和数字字段的文件 我的数据在 Excel 工作表中 如下所示 Date X 1 25 2008 0 0023456 12 23 2008 0 001987 当我在 R 中使用readxl read xlsx函
  • 递归累积函数

    我需要在 R 中编写一个累积求和函数 但我一直碰壁 该函数具有以下结构 a x1 a x2 a 2 x1 a x3 a 2 x2 a 3 x1 a x4 a 2 x3 a 3 x2 a 4 x1 等等 cumsum 似乎不适用于此类功能 有

随机推荐

  • 更新 appSettings 外部 web.config 中的变量

    我需要更新 Azure TFS 中 web config 中的值 我能够获取连接字符串替换的值 该值是 appSettings 的一部分 为此 我需要启用名为 XML 变量替换的设置 在 IIS Web 部署下 但是 web config
  • 字符显示/搜索 Unicode 字符

    在回答另一个问题时question https stackoverflow com q 18686199 418556关于这些部分 我对系统上可用字体显示的 Unicode 字符可能获得的字形感到好奇 当然 典型的机器上有 65 536 个
  • 无法通过ajax将javascript对象传递给php

    我在 javascript 中创建了一个新数组 我从一个函数向其索引添加值 然后将数组传递给 ajaxCall 函数 如果我尝试将其转换为 json 并通过 ajax 将其发送到 php 文件 但是变量 json 始终为空 我已经阅读了很多
  • 恢复小备份时磁盘空间不足

    我正在尝试从 32MB 备份恢复数据库 我的磁盘上有 6GB 可用空间 当我尝试恢复备份时 它显示磁盘空间不足错误 32MB 的备份怎么可能需要超过 6GB 的磁盘空间 可能是因为备份被压缩 或者因为有一个非常大的日志文件不需要成为备份本身
  • UIScrollView - (bounces = NO) 似乎覆盖 (pagingEnabled = YES)

    我有一个带有分页功能的 UIScrollView 因此带有 UIPageControl 并在页面之间左右拖动 轻拂的典型模型 并且我的工作正常 奇怪的是 当我想摆脱弹跳 这样就看不到左右两侧UI后面的黑色 时 突然分页不再起作用了 换句话说
  • 在 Storyboard 中实现视频视图

    我想构建简单的视频应用程序 可以查看用户添加的 YouTube 链接中的视频 我没有找到 VideoView 我的意思是如果图像视图用于图像 那么 UIView 用于视频 原库中没有执行视频观看功能的对象 但你可以导入MediaPlayer
  • 如何在 Python BaseHTTPRequestHandler 中处理分块编码?

    我有以下简单的 Web 服务器 利用 Pythonhttp module import http server import hashlib class RequestHandler http server BaseHTTPRequestH
  • 为什么选择 XML 而不是属性文件来进行 Log4J 配置?

    是否有任何理由在 Log4J 配置中使用 XML 而不是属性文件 有一个有趣的讨论这篇博客中两者的优点 http www laliluna de log4j tutorial html 以下部分摘自该博客 属性可以由属性文件或 XML 文件
  • fortran 77 到 fortran 90 的转换器软件 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有 fortran 77 编码 但我想转换为 fortran 90 在哪里可以下载转换器软件 这是我帮
  • Pandas json_normalize 因 JSON 中的空值而失败

    我有以下从外部网络服务获得的 json text id 1 name abc address flat 123 city paris street null error null 现在我想从这个 json 创建数据框 当我尝试下面时 fro
  • 无法解析模块ReactNativeEventEmitter

    将 React Native 从 0 29 升级到 0 30 后 我收到此错误消息 我多次删除了node modules 然后再次安装它们 清除了watchman缓存并npm start reset cache 我也在新项目上尝试过使用re
  • 将日期传递给 package.json 脚本

    我有一个正在尝试设置的部署脚本 我正在尝试将名为 DEPLOY DATE 的环境变量设置为等于现在 scripts deploy kubectl set env deploy api DEPLOY DATE date 问题是这只是将 DEP
  • 在linux中找不到syscall_table_32.S文件

    我正在使用linux headers 2 6 32 21虚拟机上的包 我要编写一个新的系统调用 我找到了其他文件来写入系统调用的缩写 但我找不到这个syscall table 32 S in arch x86 kernel 目录 请帮助我如
  • 将日期 yyyyMMdd 转换为 system.datetime 格式[重复]

    这个问题在这里已经有答案了 可能的重复 如何将日期从 yyyyMMdd 格式转换为 mm dd yyyy 格式 https stackoverflow com questions 4712335 how to convert date fr
  • 如何通过点击JButton来添加JPanel?

    我正在尝试创建一个小型 GUI 它有 2 个 JButtons 和 2 个 JPanels 每个 JPanels 上都有一些绘图动画 默认情况下 它必须显示第一个 JPanel 通过单击第二个 JButton 我想看到第二个 JPanel
  • 无法读取未定义的属性“thisCompilation”-react-scripts-ts

    我使用以下说明创建了一个完全空白的新项目 https developer microsoft com en us fabric get started https developer microsoft com en us fabric g
  • 在 Tensorflow 模型中添加低层

    尝试开发一些转移学习算法 我使用一些经过训练的神经网络并添加层 我正在使用 Tensorflow 和 python 在 Tensorflow 中使用现有图似乎很常见 导入图 例如使用元图 然后通过添加节点来设置新的高层 例如 我找到了这段代
  • 意外标记“(”附近出现语法错误

    下面是我的代码 它一直告诉我第 10 行导致了这个 意外标记 附近的语法错误 但我不明白为什么 我正在添加到已经编写的代码中 但它说有的部分错误不是我添加的内容的一部分 所以我对为什么会收到此错误感到非常困惑 此外 我想要一个关于此错误实际
  • 具有 2 个不同 .pem 密钥的 2 个服务器之间的 scp 命令

    我想使用 scp 和 2 个不同的 pem 密钥将文件夹从服务器 A 传输到服务器 B 这是最好的方法吗 它是否真的有效 scp i Documents server1 pem r email protected cdn cgi l ema
  • 在提取/替换操作期间保留对象属性的方法

    最近我在我的R代码中遇到了以下问题 在接受数据框作为参数的函数中 我需要添加 或替换 如果存在 一列 其中包含根据数据框原始列的值计算的数据 我编写了代码 但测试显示数据框提取 替换操作 我用过 结果是对象的特殊 用户定义 属性丢失 在意识