【问题标题】:%between% function possible improvement%between% 功能可能的改进
【发布时间】:2013-07-01 10:52:21
【问题描述】:

根据data.table ver 1.8.8 %between% 定义如下:

> `%between%`
function (x, y) 
between(x, y[1], y[2], incbounds = TRUE)
<bytecode: 0x0000000050912810>
<environment: namespace:data.table>

我认为,通过这个微小的变化,这个函数将被矢量化,

function (x, y) 
    between(x, y[[1]], y[[2]], incbounds = TRUE)

点赞between

s <- c(2, 5)
d <- c(7, 9)
> between(3, s, d)
[1]  TRUE FALSE

这个想法来自一个包含两个向量的列表,这向我建议了这种可能的用法:

`between2%` <- function(x, lst) between(x, lst[[1]], lst[[2]], incbounds = TRUE)

> 3%between%c(s,d)
[1] TRUE
> 3%between2%list(s,d)
[1]  TRUE FALSE

我的问题是:如果我替换了%between%data.table 包中的任何功能会受到影响吗?我认为不应该,[[ 应该像 [ 那样使用原子向量。我对么?谢谢

> 3%between2%c(1,5)
[1] TRUE

【问题讨论】:

  • 答案是否定的。您应该能够覆盖任何包中的任何功能,这不应该影响包。
  • @agstudy 好的,谢谢,只是想知道任何依赖项(就其他调用这个函数而言)以及 [[[ 与原子向量。再次感谢

标签: r data.table


【解决方案1】:

我认为这是一个有趣的问题,因为我想知道一般来说,其他函数使用一个函数时会是什么样子。据我所知,没有办法直接做到这一点(也许有人可以纠正我?)。但是,我整理了一个小代码,用于在其他函数的文本表示中查找函数名称。对于%between%,如下:

library(data.table)
objs <- objects("package:data.table")
z <- textConnection("funs", open="w")
dump(list=objs, file=z)
close(z)

# find all mentions of `%between%` in `data.table` functions
funs[grep("%between%",funs)] ## only mentions are when %between% is defined

# find all mentions of all `data.table` functions in `data.table` functions
locations <- lapply(objs, function(x) grep(x,funs))
names(locations) <- objs

更新:在进行了更多搜索之后,this question/answer 似乎还提供了更多关于如何使用来自library(mvbutils)foodweb 以编程方式检测依赖关系的信息。

【讨论】:

  • 非常感谢!很有帮助。我还发现了一个奇怪的行为。只要R 得到这条线dump(list=objs, file=z),我的R 会话就会崩溃。在我的工作区中有几十个data.framedata.table,.RData 几乎是 1 GB,在内存中占用 10 GB。但是在空工作区中运行您的代码不会发生这种情况。无论如何,再次感谢
  • 这很有趣......我们需要比我更专业的人来解决这个问题。
  • 我认为这也很困难。我无法重现这种情况,我会提出一个问题:-)。我尝试了一些虚拟表,但没有。顺便说一句,我刚看到你的 rite 包裹。很好。你能告诉我你对this的想法
  • 我曾考虑在rite 中加入类似的内容。但首先我想为现有的语法高亮构建一个更好的界面,因为我希望人们能够动态控制它。然后对数据框中的新对象和变量执行相同的操作会相对简单。不过,我不知道如何在 rstudio 中进行操作。
  • 你好,为什么选择objects("package:data.table")objects(asNamespace("data.table")) 有更多的名字:-)
猜你喜欢
  • 2020-11-07
  • 1970-01-01
  • 2013-03-14
  • 2011-06-12
  • 1970-01-01
  • 2010-11-23
  • 2017-01-01
  • 1970-01-01
  • 2021-05-06
相关资源
最近更新 更多