小编Don*_*nen的帖子

省略号...作为替代函数?

我无法理解括号如何/为什么在它们不应该起作用的地方起作用\xc2\xae。

\n
f = function(...) substitute(...()); f(a, b)\n[[1]]\na\n[[2]]\nb\n# but, substitute returns ..1\nf2 = function(...) substitute(...); f2(a, b)\na\n
Run Code Online (Sandbox Code Playgroud)\n

通常会抛出错误,找不到在不正确的上下文中使用的函数“...”或\'...\' ,例如在调用时(\\(...) ...())(5)

\n

我尝试过的\
n我查看了源代码substitute找出为什么这里不会发生这种情况。R 内部1.1.1 和 1.5.2 表示...是 SEXPTYPE DOTSXP,一对承诺列表。这些承诺是由 提取的substitute

\n
#  \\-substitute #R\n#    \\-do_substitute #C\n#      \\-substituteList #C recursive\n#        \\-substitute #C\n
Run Code Online (Sandbox Code Playgroud)\n

逐行进行,我陷入了困境substituteList,其中h是当前正在处理的元素...。这在第 2832 行递归发生if (TYPEOF(h) == DOTSXP) h = substituteList(h, R_NilValue);。我没有...()在源代码中找到案例的异常处理,所以我怀疑在此之前发生了什么。 …

r function ellipsis

27
推荐指数
1
解决办法
739
查看次数

何时使用哈希表?

tl;dr \n许多功能请求因维护负担而被 R-core 拒绝,但不是hashtab(R>4.2.0)。?hashtab声称可以有效地将键与值关联起来。存在许多其他实现(hashr2rhashmap等),以及环境和用户友好的扩展(rlangRCR6等)。hashtab除了对象混淆和任意键之外,我还没有找到比其他更有效的明显用例。

\n

问题
\nhashtab除了任意键之外,是否具有独特的功能,或者对于某些用例来说,在速度内存语法方面是否有明显的好处?

\n

我试图研究环境和hashtab.

\n
set.seed(1)\nmake_hash <- function(n, keys, values) {\n    h <- hashtab("identical", n)\n    for(i in seq_along(keys)) sethash(h, keys[i], values[[i]])\n    h\n}\nmake_env <- function(n, keys, values) setNames(values, keys) |> list2env(size = n)\n\nget_mem <- function(x) as.numeric(lobstr::obj_size(x)) * 0.001\ncompare <- function(n, keylen) {\n    keys …
Run Code Online (Sandbox Code Playgroud)

r function

10
推荐指数
0
解决办法
253
查看次数

获取宏中函数的名称

我编写了一个宏,通过使用存储在dict. 在此示例中,它插入了引发错误的函数名称,请参阅discourse和。@__FUNCTION__

\n
exception = Dict(:foo => ("bar ~", ArgumentError))\nmacro \xe2\x9b\x94(id)\n    msg, type = exception[id]\n    quote\n        msg = replace($msg, "~" => StackTraces.stacktrace()[1].func)\n        throw($type(msg))\n    end \nend\n
Run Code Online (Sandbox Code Playgroud)\n

这在f使用位置参数时效果很好,

\n
f(x, p) = p < 5 ? x : @\xe2\x9b\x94 foo\nf(1, 10)\n#> ERROR: ArgumentError: bar f\n
Run Code Online (Sandbox Code Playgroud)\n

#..#在使用关键字参数时显示。

\n
g(x; p = 3) = p < 5 ? x : @\xe2\x9b\x94 foo\ng(1, p = 10)\n#> ERROR: ArgumentError: bar #g#N\n
Run Code Online (Sandbox Code Playgroud)\n

N是会话中计算的第 …

error-handling julia

5
推荐指数
1
解决办法
102
查看次数

检测 R 中的空列表

我正在计算存储在列表中的一些值,并将该列表附加到一个名为 的现有列表中results。在某些情况下,计算会返回TRUETRUE在这种情况下,我想删除从列表返回的元素:

my_list
$`0`
[1] TRUE

$`1`
[1] TRUE


my_list = lapply(list(my_list), function(x){Filter(Negate(isTRUE), x)})
> my_list
[[1]]
named list()
Run Code Online (Sandbox Code Playgroud)

这将返回一个空列表。现在我想检查一下:

  • 如果列表为空 - 不执行任何操作
  • 如果列表不为空,则将其附加到结果中

问题是当我检查时

length(my_list) >0
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

如何检测列表是否为空?

r list string-length

2
推荐指数
1
解决办法
668
查看次数

标签 统计

r ×3

function ×2

ellipsis ×1

error-handling ×1

julia ×1

list ×1

string-length ×1