小编Emm*_*Lin的帖子

将函数列表作为参数传递的最佳方法是什么?

我正在寻找关于将函数列表作为参数传递代码的最佳方法的建议.

我想做的事:

我想作为一个参数传递一个函数来将它们应用于特定的输入.并根据这些提供输出名称.

一个"可重复的"例子

input = 1:5
Run Code Online (Sandbox Code Playgroud)

传递的功能是mean,min

预期电话:

foo(input, something_i_ask_help_for)
Run Code Online (Sandbox Code Playgroud)

预期产量:

list(mean = 3, min = 1)
Run Code Online (Sandbox Code Playgroud)

如果不是很清楚,请参阅我的两个解决方案以进行说明.

解决方案1:将函数作为参数传递

foo <- function(input, funs){
  # Initialize output
  output = list()

  # Compute output
  for (fun_name in names(funs)){
    # For each function I calculate it and store it in output
    output[fun_name] = funs[[fun_name]](input)
  }

  return(output)
}

foo(1:5, list(mean=mean, min=min))
Run Code Online (Sandbox Code Playgroud)

我不喜欢这种方法是我们不能通过这样做来调用它:foo(1:5, list(mean, min)).

解决方案2:将函数名称作为参数传递并使用get

foo2 <- function(input, funs){
  # Initialize output
  output = list()

  # …
Run Code Online (Sandbox Code Playgroud)

r function parameter-passing

6
推荐指数
1
解决办法
534
查看次数

获取列表中的函数名称

我希望实现的目标

所以我想在函数列表中获取我的函数名称.

这是一个例子:

foo = list(foo1 = sum, foo2 = mean)
Run Code Online (Sandbox Code Playgroud)

我想从中提取的foo是:

list("sum", "mean")
Run Code Online (Sandbox Code Playgroud)

我希望它是一个功能,意思是:

> foo = list(foo1 = sum, foo2 = mean)
> super_function(foo)
list("sum", "mean")
Run Code Online (Sandbox Code Playgroud)

我检查了什么

应用名称:

> sapply(foo , names)
$`foo1`
NULL

$foo2
NULL
Run Code Online (Sandbox Code Playgroud)

应用deparse(substitute())

> my_f <- function(x)deparse(substitute(x))
> sapply(foo, my_f)
    foo1     foo2 
"X[[i]]" "X[[i]]" 
Run Code Online (Sandbox Code Playgroud)

这两个想法都没有用......

更多背景:

这里有一些更多的细节.一个人不需要他们理解第一个问题,但社区要求提供额外的细节.

我正在使用这些函数作为用户给出的聚合函数.

data(iris)
agg_function<-function(data, fun_to_apply){
  res <- list()
  for (col_to_transform in names(fun_to_apply)){
    res[col_to_transform] <- (fun_to_apply[[col_to_transform]])(data[[col_to_transform]])
  }
  res
}


agg_function(iris, fun_to_apply = list("Sepal.Length" = mean, "Petal.Length" = …
Run Code Online (Sandbox Code Playgroud)

r

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

Tesseract 多种输出格式

我的背景

我正在使用 tesseract 从图像中提取文本。

我正在生成一个.tsv来检索提取的文本并对其执行一些正则表达式,并生成一个.pdf以获得可搜索的 pdf。

我的方法是调用 tesseract 两次:

  • 一个要求 .tsv
  • 有人索要 .pdf

但我觉得这不是很有效(相同的计算必须进行两次)

我的愿望是什么

我希望让我的计算速度更快。我的想法是只调用一次 tesseract 但指定两种输出格式

是否可以?如果是这样怎么办?

ocr tesseract

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

是否可以不设置s4插槽的类型

我想实现的目标

为了构建通用框架,我想构建一个s4类,其插槽可以是任何类型。可能吗?如果是这样怎么办?

到目前为止我发现了什么

我发现这个问题解决了多类型问题。但是我想让任何类型的对象都可以,而不仅仅是一些预定义的类型。

例:

setClass("foo",
         representation(
           anything = "..."
         )
)

# I would like to be able to perform all of these
new("foo", anything = 1)
new("foo", anything = "a")
new("foo", anything = data.frame())
...
Run Code Online (Sandbox Code Playgroud)

r s4

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

标签 统计

r ×3

function ×1

ocr ×1

parameter-passing ×1

s4 ×1

tesseract ×1