R 中函数多态性的建议做法是什么?

2024-04-24

假设我想写一个函数R这是对某些数据进行充分统计的函数。例如,假设函数,调用它foo.func仅取决于数据样本的样本均值。为了方便起见,我认为用户可能喜欢传递到foo.func随机变量的样本(在这种情况下foo.func计算样本平均值),or样本均值本身,这就是全部foo.func需要。出于效率的考虑,如果有多个功能,例如foo.func被调用可以取样本平均值。在这种情况下,平均值只需要计算一次(在我遇到的实际问题中,所讨论的样本统计数据可能需要大量计算)。

总而言之,我想写foo.func初学者(传递数据,让函数计算足够的统计数据)和专家(预先计算足够的统计数据以提高效率并将其传递)都可以访问。为此有哪些推荐做法?我是否传入了逻辑标志?多个参数?一些方法可能是:

#optional arguments
foo.func <- function(xdata, suff.stats=NULL) {
  if (is.null(suff.stats)) {
    suff.stats <- compute.suff.stats(x)
  }
  #now operate on suff.stats
}

or

#flag input
foo.func <- function(data.or.stat, gave.data=TRUE) {
  if (gave.data) {
    data.or.stat <- compute.suff.stats(data.or.stat)
  }
  #now operate on data.or.stat
}

我认为我倾向于前者


R 实现多态性的方法是通过 CLOS(Common Lisp 的 OO)模型,其中方法与通用函数(动词)而不是类(名词)相关联。例如,

# suprising that there is not an equivalent function in R
# to propagate inheritance...
addclass <- function(x,classname) structure(x,class=append(class(x),classname))

# this should be your main function that does stuff
# here, the identity function is assigned for example
dostuff <- identity

# define generic function and methods
foo <- function(x,...) UseMethod("foo")
foo.raw <- function(x,...) dostuff(mean(x))
foo.stats <- function(x,...) dostuff(x)

# define two types of inputs
x <- 1:10
x <- addclass(x,"raw")

y <- 5
y <- addclass(y,"stats")

# apply
foo(x)
# [1] 5.5
foo(y)
# [1] 5
# attr(,"class")
# [1] "numeric" "stats"  

该示例使用 RS3OOP模型,我认为已经足够了;S4更现代、更安全,但增加了很多样板。

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

R 中函数多态性的建议做法是什么? 的相关文章

随机推荐

  • 如何使用 PowerShell 从 Azure 函数查询 Azure 表

    我有一个名为的 Azure 表csvtable大约有一百万行 我想使用 Azure 函数查询并返回一行 我尝试过的是使用与表的输入集成 但是据我所知 这只给了我一个数据的子集 inputTable要过滤的变量 我也尝试过打开identity
  • 从 IValueConverter 获取对 ViewModel 的引用

    是否有一种干净的和 或可接受的标准方式从 IValueConverter 引用 ViewModel 或者这是否打破了 MVVM 模式 基本上 我想根据 ViewModel 的其他属性转换 UI 中的绑定数据 我想这与如何从 IValueCo
  • 由相同数据类型的不同构造函数共享的 Haskell 记录访问器

    关于 Haskell 记录的基本问题 如果我定义这个数据类型 data Pet Dog name String Cat name String deriving Show 以下作品 main do let d Dog name Spot c
  • SEO 友好的 URL 真的会影响页面的排名吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如今 SEO 友好的 URL 非常流行 但它们实际上对 Google 和其他搜索引擎中的页面排名产生有意义的影响吗 如果是这样 为什么 如
  • 稳定标准库 qsort?

    我假设 stdlib 中的旧 qsort 函数不稳定 因为手册页没有提及任何相关内容 这就是我正在谈论的功能 include
  • 部署的 Django 项目出现“列表索引超出范围”错误。本地项目工程

    我的项目在本地计算机上运行正常 但是当我将其部署到服务器时出现错误 异常值 列表索引超出范围 异常位置 get context data中的 var www bias experiment src survey views py 第151行
  • MessageBox.Show() 字体

    有没有办法可以更改 MessageBox Show 中的字体类型以获得更大的尺寸 粗体 斜体样式 您始终可以创建自己的 MessageBox 创建一个新的 Windows Forms 类 using System using System
  • scanf函数返回什么?

    scanf 在以下情况下返回的值是多少 int g int p scanf d g Originally int p scanf d g 我知道签名scanf函数是 int scanf const char format 是什么int该函数
  • 使用带有百分比的 CSS Clip

    我试图在 2 个单独的 div 中仅显示图像的上半部分和同一图像的下半部分 我尝试过使用 CSS 属性clip 但似乎不支持 作为单位 只有我吗 您有只显示一半图像的解决方案吗 更新 5年以上后 CSS Clip 属性现已弃用 考虑使用cl
  • 在远程机器上执行多个命令

    在下面的命令中 我尝试 ssh 命令并执行多个命令 如果任何命令失败 即如果 command1 退出 那么如果 command1 和 commnd 2 退出 否则在远程计算机上执行命令 3 我如何退出 我怎样才能做到这一点 ssh logi
  • 如何使用 Laravel 将二进制数据插入数据库?

    我正在尝试使用 Laravel 4 及其 Eloquent ORM 将二进制数据插入到 PostgreSQL 数据库中 我在迁移中有以下内容 Schema create DataBlobs function table table gt i
  • 如何获取驱动器号和名称(卷标)

    我有一个程序可以告诉我所有硬盘 USB 但它只告诉我驱动器号而不是名称 这是我所拥有的 DriveInfo drives DriveInfo GetDrives Console WriteLine Detected Drives for i
  • 计算一个月的工作日数[重复]

    这个问题在这里已经有答案了 可能的重复 获取给定月份的工作日数 https stackoverflow com questions 8396507 get number of weekdays in a given month 如何计算每个
  • 如何在Android中从url获取字节图像

    我是 android 新手 图像存储在服务器中Base64格式 那么我怎样才能得到它server to 我的项目并使用 Json 对象设置为我的 ImageView 请帮我 任何帮助将不胜感激 尝试这个 首先将 Url 转换为 byte b
  • Django:如何在ajax中返回模型表单集并在模板中使用

    我需要在运行时使用ajax动态地将表单添加到我的表单集中 我指的是使用 Ajax 将表单动态添加到 Django 表单集 https stackoverflow com questions 501719 dynamically adding
  • 为什么 Android webview 仅当 type="number" 而不是 type="text" 时才在键盘中显示“下一步”?

    我有一个带有几个输入字段的表单 因此 我想使用下一个按钮在字段之间导航 但这仅在输入字段类型为 数字 时有效 使用 type text 则不会 这是 Android 3 2 1 中的错误吗 我的输入字段是这样的
  • WPF Datagrid - 如何验证多行并标记所有无效行?

    我有一个包含行的数据网格 其中验证取决于他的兄弟姐妹 到目前为止 我正在使用 BindingGroups 和自定义 ValidationRule 同时验证多行 但我不知道如何更改无效行条目的外观 我返回一个 ValidationResult
  • NSView mouseEntered/mouseMoved 在拖动操作期间未调用(反之亦然)

    我有一个带有透明边框的无边框窗口NSView 当鼠标光标进入透明视图时 应该会出现第二个视图 放置目标 允许用户放置文件 问题是draggingEntered 将文件拖到上方时不会被调用透明视图 因此放置目标视图永远不会出现 透明视图具有正
  • 如何使图像在轮播中居中

    如何使图像在轮播中居中 我使用 bootstrap 教程中的代码尝试了 bootstrap 3 carousel a href Webconte Details 124 img src Webconte Image 124 a div cl
  • R 中函数多态性的建议做法是什么?

    假设我想写一个函数R这是对某些数据进行充分统计的函数 例如 假设函数 调用它foo func仅取决于数据样本的样本均值 为了方便起见 我认为用户可能喜欢传递到foo func随机变量的样本 在这种情况下foo func计算样本平均值 or样