使用字符串作为函数的参数

000andy8484

有大量的在等这个话题的问题,包括这个问题如何计算表达式,这一个展示如何使用一些不同的意见eval,而这个答案显示了eval(substitute(.))招。Hadley Wickham撰写的Advanced R元编程部分是学习非标准评估(NSE)的一个很好的参考我注意到在答案中存在很多分歧,其中一些信号表明使用字符串作为待评估对象存在问题

我处于使用字符串作为子函数的参数的情况。
这里是一个代表:

# Consider a little toy function:
little_fun <- function(z = 2, y = 1) {
     (z + 2) / y
}
little_fun()
#> [1] 4

# I can call little_fun() on lists of arguments:
z_list <- c(1,2,3)
purrr::map_dbl(.x = z_list, ~ little_fun(z = (.x)))   # This is basically a tidyverse equivalent for lapply()
#> [1] 3 4 5

# or also:
z_list <- c(1,2,3)
y_list <- c(-1, 0, 1)
purrr::map2_dbl(.x = z_list, .y = y_list, ~ little_fun(z = (.x), y = (.y)))  # again, similar to mapply()
#> [1]  -3 Inf   5

# But I also want to assign the parameters from a more general parent function:
big_fun <- function(par = "y") {

     stopifnot(par %in% c("z", "y"))

     par_list <- c(1,2,3)
     purrr::map_dbl(.x = par_list, ~ little_fun(par = (.x)))   # <--- key line <---
}
big_fun()
#> Error in little_fun(par = (.x)): unused argument (par = (.x))

我的问题:我仍然无法运行我的代码。

我的问题:使用字符作为函数参数为什么不好?我应该避免这种情况吗?如何?我想了解如何改善我的推理能力并学习可用的替代方法。

r2evans

我不同意chinsoon12对您的问题“我应该避免这种情况吗?”的回答

“保护自己免受未来的愚蠢” – chinsoon12

话虽这么说,动态分配的参数名称是do.call很方便的地方

big_fun <- function(par = "y") {
     stopifnot(par %in% c("z", "y"))
     par_list <- c(1,2,3)
     purrr::map_dbl(.x = par_list, ~do.call(little_fun, as.list(setNames(.x, par))))
}

big_fun()
# [1] 4.000000 2.000000 1.333333
big_fun("z")
# [1] 3 4 5

我个人发现这样的编程有时会令人反感和有问题,而在另一些情况下,也许是优雅地解决某些问题的唯一方法。有时,它是最简洁,强大和有效的解决方案。

仅检查一下,我相信big_fun()它本身应该与此匹配:

sapply(1:3, little_fun, z=2)
# [1] 4.000000 2.000000 1.333333

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用字符串作为HTML

来自分类Dev

使用字符串变量的值作为对象参数访问器

来自分类Dev

使用字符串数组作为函数参数

来自分类Dev

使用字符串数组作为参数对POST请求进行卷曲

来自分类Dev

使用常量字符串作为Enum构造函数参数

来自分类Dev

VBA使用字符串数组作为子字符串参数InStr函数(Excel)

来自分类Dev

无法为使用字符串作为参数的角组件创建构造函数

来自分类Dev

在R中使用字符串作为函数参数

来自分类Dev

如何使用字符串作为参数从Go调用Rust函数?

来自分类Dev

使用字符串作为ipwtm函数的公式?

来自分类Dev

使用字符串作为HTML

来自分类Dev

我可以在python中使用字符串作为命名参数吗

来自分类Dev

使用字符串变量的值作为对象参数访问器

来自分类Dev

在WebApi控制器中使用字符串作为路由参数。错误405

来自分类Dev

使用字符串作为参数的一部分

来自分类Dev

使用字符串数组作为函数参数

来自分类Dev

如何通过使用字段的子字符串作为参数来创建查询?

来自分类Dev

使用字符串作为函数的参数

来自分类Dev

在Bash脚本中使用字符串作为参数

来自分类Dev

Python 3:如何允许在定义的字符串中使用字母(字符串)作为参数

来自分类Dev

VBA使用字符串数组作为子字符串参数InStr函数(Excel)

来自分类Dev

关于在R中使用字符串作为函数参数的一些信息

来自分类Dev

如何使用字符串作为动态参数名称

来自分类Dev

使用字符串数组作为 GET 参数的 Web API 2 操作未按预期工作

来自分类Dev

在 Python 中使用字符串作为函数的参数

来自分类Dev

在函数中使用字符串作为参数名称?

来自分类Dev

如何在 Python 中使用字符串作为函数参数并具有可变数量的参数

来自分类Dev

Request .get 如何使用字符串作为参数

来自分类Dev

使用字符串作为参数名称

Related 相关文章

  1. 1

    使用字符串作为HTML

  2. 2

    使用字符串变量的值作为对象参数访问器

  3. 3

    使用字符串数组作为函数参数

  4. 4

    使用字符串数组作为参数对POST请求进行卷曲

  5. 5

    使用常量字符串作为Enum构造函数参数

  6. 6

    VBA使用字符串数组作为子字符串参数InStr函数(Excel)

  7. 7

    无法为使用字符串作为参数的角组件创建构造函数

  8. 8

    在R中使用字符串作为函数参数

  9. 9

    如何使用字符串作为参数从Go调用Rust函数?

  10. 10

    使用字符串作为ipwtm函数的公式?

  11. 11

    使用字符串作为HTML

  12. 12

    我可以在python中使用字符串作为命名参数吗

  13. 13

    使用字符串变量的值作为对象参数访问器

  14. 14

    在WebApi控制器中使用字符串作为路由参数。错误405

  15. 15

    使用字符串作为参数的一部分

  16. 16

    使用字符串数组作为函数参数

  17. 17

    如何通过使用字段的子字符串作为参数来创建查询?

  18. 18

    使用字符串作为函数的参数

  19. 19

    在Bash脚本中使用字符串作为参数

  20. 20

    Python 3:如何允许在定义的字符串中使用字母(字符串)作为参数

  21. 21

    VBA使用字符串数组作为子字符串参数InStr函数(Excel)

  22. 22

    关于在R中使用字符串作为函数参数的一些信息

  23. 23

    如何使用字符串作为动态参数名称

  24. 24

    使用字符串数组作为 GET 参数的 Web API 2 操作未按预期工作

  25. 25

    在 Python 中使用字符串作为函数的参数

  26. 26

    在函数中使用字符串作为参数名称?

  27. 27

    如何在 Python 中使用字符串作为函数参数并具有可变数量的参数

  28. 28

    Request .get 如何使用字符串作为参数

  29. 29

    使用字符串作为参数名称

热门标签

归档