【发布时间】:2020-10-17 02:08:13
【问题描述】:
编辑:
labelFormat 函数来自 leaflet 包。
我想修改 format 函数内的一个参数,该函数位于 formatNum 函数内。
所以从这里开始:
labelFormat <- function (prefix = "", suffix = "", between = " – ", digits = 3,
big.mark = ",", transform = identity)
{
formatNum <- function(x) {
format(round(transform(x), digits), trim = TRUE, scientific = FALSE,
big.mark = big.mark)
}
function(type, ...) {
switch(type, numeric = (function(cuts) {
paste0(prefix, formatNum(cuts), suffix)
})(...), bin = (function(cuts) {
n <- length(cuts)
paste0(prefix, formatNum(cuts[-n]), between, formatNum(cuts[-1]),
suffix)
})(...), quantile = (function(cuts, p) {
n <- length(cuts)
p <- paste0(round(p * 100), "%")
cuts <- paste0(formatNum(cuts[-n]), between, formatNum(cuts[-1]))
paste0("<span title=\"", cuts, "\">", prefix, p[-n],
between, p[-1], suffix, "</span>")
})(...), factor = (function(cuts) {
paste0(prefix, as.character(transform(cuts)), suffix)
})(...))
}
}
我想要这个:
labelFormat <- function (prefix = "", suffix = "", between = " – ", digits = 3,
big.mark = ",", transform = identity)
{
formatNum <- function(x) {
format(round(transform(x), digits), trim = TRUE, scientific = FALSE,
big.mark = big.mark, decimal.mark = ',')
}
function(type, ...) {
switch(type, numeric = (function(cuts) {
paste0(prefix, formatNum(cuts), suffix)
})(...), bin = (function(cuts) {
n <- length(cuts)
paste0(prefix, formatNum(cuts[-n]), between, formatNum(cuts[-1]),
suffix)
})(...), quantile = (function(cuts, p) {
n <- length(cuts)
p <- paste0(round(p * 100), "%")
cuts <- paste0(formatNum(cuts[-n]), between, formatNum(cuts[-1]))
paste0("<span title=\"", cuts, "\">", prefix, p[-n],
between, p[-1], suffix, "</span>")
})(...), factor = (function(cuts) {
paste0(prefix, as.character(transform(cuts)), suffix)
})(...))
}
}
查看format 函数中的新参数decimal.mark。
但要做到这一点,我不想重新定义 labelFormat 函数。
在 Python 中,我使用非常相似的东西来修改函数内的参数。假设我们要修改json.dumps的默认行为:
import functools
import json
my_json_dumps = functools.partial(json.dumps, ensure_ascii=False)
现在我可以调用my_json_dumps而不是使用json.dumps,这样我就不需要重新定义整个函数了。
我的问题有点不同,因为我需要修改内部函数内部的参数!
【问题讨论】:
-
函数中的变量在全局环境中不可用。最好不要在另一个函数中定义函数。只需在另一个之前创建它并在第二个中使用它。
-
函数
g仅在f运行时创建。 (并且每次f在不同的环境下运行时都会重新创建,因此每次都会得到一个“不同的”f。)如果从f返回的值没有包含g的值,调用函数f后将不存在。鉴于您所要求的内容没有多大意义,您能否更详细地描述您要解决的具体问题? -
如果您能够修改它,您可以使用
<<-赋值将g()函数分配给一个全局变量。 -
如果您提供更多背景信息肯定会很有用 - 即这是一个实际问题,还是“我只是想知道如何......?”问题?
-
我添加了更多上下文,我认为现在最好重命名答案的标题...谢谢。