【问题标题】:In R, how do you create a function that evaluates arguments as strings?在 R 中,如何创建一个将参数评估为字符串的函数?
【发布时间】:2019-01-07 20:54:33
【问题描述】:

我有一个大型数据集,我正在尝试在其中搜索关键字。以交互方式执行此操作,我一直在使用 grep 一样:

fee <- grep("fi", fo$fum)
View(fi$fum[fee, ])

这对我的目的来说足够好,但它有很多重复的输入。我想我可以通过编写一个函数来加快这个过程:

giant_search <- function(x, y) {
    y <- grep(quote(x), fo$fum)
    return(y)
    View(fo$fum[y, ])
}

但是,当我使用此函数时,y 不返回任何值(因此,当然,View 也不显示任何内容)。但是,如果我在函数之外编写完全相同的代码,它将完全按照我想要/期望的方式工作。

我认为问题在于 R 如何处理函数中的函数参数或字符串,但我不知道如何解决该问题。

【问题讨论】:

  • 不需要quote(x),因为grep 需要一个字符串参数。 return 之后的任何内容都将被忽略,因此将 return 移动到函数的末尾。最后,如果您将在函数内部使用y,则无需将其作为参数传递。
  • 您究竟是如何调用giant_search() 函数的?如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。
  • Flick 先生,我称它为giant_search(giant_name)。在下面运行 A. Suliman 的解决方案,我意识到我的部分问题是参数没有作为字符串传递给函数(即我应该改为使用 giant_search(x='giant_name'))。

标签: r function functional-programming grepl


【解决方案1】:
giant_search <- function(x, y){
y <- grep(x, iris$Species)
View(iris[y, ])
return(y)
}
giant_search(x='setosa')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-28
    • 2021-05-21
    • 2020-11-01
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    相关资源
    最近更新 更多