问题标签 [pryr]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - 函数生成;更改其他功能的默认值(部分)
我需要一个函数生成器,它接受另一个函数和该函数的任何参数并设置新的默认值。我认为@hadley'spryr::partial
就是那个神奇的功能。它完全符合我的要求,只是你不能更改新的默认值。所以在这里我可以更改sep
我的新paste
功能,但不能更改新的默认值collapse = "_BAR_"
。我怎样才能以partial
这种方式执行(即,默认为collapse = "_BAR_"
但collapse = NULL
如果需要,可以将其设置为)?如果这是不可能的,partial
有没有办法重写代码partial
来做到这一点:https ://github.com/hadley/pryr/blob/master/R/partial.r
r - 什么是父母承诺?
在包pryr
中,有一个名为parent_promise
.
我知道什么是 promise,但我不熟悉这个词parent promise。此外,我并不真正理解文档中的示例,也许是因为我不知道我在寻找什么。
为了帮助我更好地理解上面的例子,有人可以解释一下父承诺是什么,以及它是否/如何与常规承诺不同?
r - MASS::rlm(method="MM") 的部分应用
我正在查看有人试图从ggplot内部使用的这个问题。MASS::rlm(method="MM")
geom_smooth()
我认为这将是一个很好的机会pryr::partial
,但我对我认为的调度问题感到困惑。
首先是我认为应该起作用的示例:
唉,尝试绘图时出现以下错误:
我的想法是,这与参数的顺序有关,命名参数篡夺了位置参数之一。
所以,这里的问题是,有没有办法部分应用这个函数,它是一个可选的,提供的命名参数?
r - 获取R函数返回的变量名
我有这个代码:
b(cars)
返回一个包含字符串cars
和 data.frame 内容的列表cars
。
有什么方法a(cars) %>% b()
可以返回字符串cars
(函数返回的变量的名称a()
)和data.frame的内容?
相反,它返回.
data.frame 的内容。
也就是说,我希望第二个函数返回第一个函数返回的变量的名称以及变量的内容。
我真正想做的b()
是类似write.csv(x, paste0(deparse(substitute(x)), ".csv"))
.
有什么建议么?
r - 嵌套与未嵌套(整洁)data.frame 的大小?
此问题使用包含列表列(嵌套)的 data.frame。这让我想知道为什么/如果以这种方式工作有优势。我假设您希望最小化每个表使用的内存量......但是当我检查时我很惊讶:
比较嵌套格式和整洁格式的表格大小:
1. 生成 2-col 和 5-col data.frame 的嵌套/整洁版本:
他们看起来像:
2.计算对象大小和col大小
from: lapply(list(df,dfu,df_morecols,dfu_morecols),object_size)
170 MB vs. 162 MB 嵌套 vs. tidy 2-col df
170 MB vs. 324 MB 嵌套 vs. tidy 5-col df
3. 绘制由父对象着色的列大小:
问题:
- 与嵌套的相比,整洁的 2-col df 占用空间更小的原因是什么?
- 为什么这种效果不会改变为 5-col df?
r - pryr::mem_used() 在内存单元(MB,GB,...)之间的转换
pryr::mem_used() 默认显示内存使用为兆字节。为什么它在乘法(或除法)后转换单位名称(例如 MB -> GB)而不是值?
编辑:这个问题是指 mem_used() 输出的格式化方式。
r - 基于变量名将位置参数转换为R函数中的命名参数
在 R 中有一个常见的函数调用模式,如下所示:
这种名称的重复很有帮助,因为如果要更改子参数的顺序,或者要在列表中添加其他变量,它可以防止潜在的潜在错误:
但是当参数的名称变长时,这变得很麻烦:
我想有一种方法来获得命名参数的安全性,而无需再次实际键入名称。当我只能修改父母而不是孩子时,我希望能够做到这一点。我会设想这样的事情:
whereparams()
将是一个新函数,它根据变量的名称将未命名的参数转换为命名参数。例如:
'pryr' 中有几个功能接近于此,但我还没有想出如何将它们结合起来做我想要的。 named_dots(c,b,a)
return list(c=c, b=b, a=a)
,并且standardise_call()
有类似的操作,但我还没有弄清楚如何能够将结果转换为可以传递给未修改的child()
.
我希望能够混合使用隐式和显式命名参数:
能够混合一些未命名的常量(不是变量),并在传递给子进程时将它们视为命名参数也是很好的。
但是以非 R 的方式,我更愿意提出错误,而不是试图混淆可能的程序员错误:
是否有已经存在的工具可以做到这一点?将现有功能拼凑起来做我想做的简单方法?更好的方法来实现在更改参数列表的情况下获得安全的相同目标而无需繁琐的重复?改进我建议的语法以使其更安全?
赏金前澄清:parent()
和child()
函数都应该被认为是不可更改的。我对使用不同的界面进行包装不感兴趣。相反,我在这里寻找一种以params()
通用方式编写提议函数的方法,该方法可以动态重写参数列表,以便两者都parent()
可以child()
直接使用安全但不冗长的语法。
赏金后澄清:虽然反转父子关系并使用 do.call() 是一种有用的技术,但它不是我在这里寻找的技术。相反,我正在寻找一种接受“...”参数的方法,将其修改为具有命名参数,然后以封闭函数将接受的形式返回它。正如其他人所暗示的那样,这可能真的是不可能的。就个人而言,我目前认为 C 级扩展是可能的,我希望这个扩展已经存在。也许vadr
包裹可以满足我的要求?https://github.com/crowding/vadr#dot-dot-dot-lists-and-missing-values
部分功劳:让赏金到期我觉得很傻。如果没有完整的解决方案,我会将其奖励给任何提供至少一个必要步骤的概念证明的人。例如,修改函数中的“...”参数,然后将其传递给另一个函数而不使用 do.call()。或者以父母可以使用的方式返回未修改的“...”参数。或者任何最能指出直接解决方案的方法,甚至是一些有用的链接:http ://r.789695.n4.nabble.com/internal-manipulation-of-td4682090.html 但我不愿意将其授予一个以“你不想这样做”或“那是不可能的,所以这是一个替代方案”为前提的(否则完全合理的)前提的答案。
赏金奖励:有几个非常有用且实用的答案,但我选择将赏金奖励给@crowding。虽然他(可能是正确的)断言我想要的是不可能的,但我认为他的回答最接近我所追求的“理想主义”方法。我还认为他的vadr包可能是解决方案的一个很好的起点,无论它是否符合我的(可能不切实际的)设计目标。如果有人想出一种方法来完成不可能的事情,那么“公认的答案”仍然有待商榷。感谢其他答案和建议,希望它们能帮助某人将这些部分组合在一起以获得更强大的 R 语法。
r - 使用函数运算符编写函数无法按预期工作
在以下示例中,我创建了add_timing
函数运算符。输入是一个函数(比如mean
),它返回一个与 执行相同操作的函数mean
,但会报告函数完成所需的时间。请参见以下示例:
接下来我尝试使用pryr::compose
创建相同的timed_mean
函数(我喜欢语法):
但这确实为我提供了所需的输出:
似乎 compose 操作并没有导致add_timing
函数实际被执行。只有在调用函数之后,new才timed_mean_compose
真正显示正确的函数输出。
根据@HadleyWickham 的 Advanced R 中的以下示例,我希望它在我使用它时能够正常工作(请参阅下面的摘录):
函数dot_every
运算符的使用方式与我add_timing
上面使用的方式相同。
我错过了什么?
r - R地址函数
我正在使用Raddress()
中的包中的函数pryr
,并且想知道是否可以预期以下结果...
即0x112d007b0!= 0x11505c580
我希望它们的值相同……有没有办法调整add
上面的函数以确保它得到相同的值?即在父环境中获取地址?
r - 清除工作区后 R 内存使用量没有减少
我在 R 中运行了大量计算(使用 RStudio),我对这将 R 留在其中的状态感到困惑。具体来说,在我运行之后
接着
我看到正在使用大约 400 兆字节的空间。更密切地检查
我看到以下内容:
垃圾回收27693 = 26029+1296+368(2级)...
使用了 95.5 MB 的 cons 单元 (31%)
使用了 331.6 MB 的向量 (33%)
已用 (Mb) gc 触发器 (Mb) 已用最大 (Mb)
Ncells 1787624 95.5 5684620 303.6 5684620 303.6
Vcell 43457011 331.6 132000253 1007.1 262740244 2004.6
我的问题是如何弄清楚所有这些空间在使用什么?具体来说,330 Mb 的向量存储让我感到困惑,因为我只是 rm'd 所有用户分配的对象。R 的内部结构占用这么多空间是否合理?
感谢任何人都可以提供的任何帮助。