4

以下是有效的 R 函数的前几行:

teetor <- function(x,y) {

require("quantmod")
require("tseries")

alpha <- getSymbols(x, auto.assign=FALSE)
bravo <- getSymbols(y, auto.assign=FALSE)

t     <- as.data.frame(merge(alpha, bravo))

# ... <boring unit root econometric code>

}

当我将两个股票代码作为函数参数传递时,我需要用引号将它们括起来:

teetor("GLD", "GDX")

我希望能够简单地输入:

teetor(GLD, GDX)
4

3 回答 3

13

不。为了节省几次击键而牺牲清晰、简单的代码是一个坏主意。您创建了一个只能以交互方式使用的函数,不能从另一个函数调用。

于 2011-02-16T01:56:56.217 回答
8

有几种方法可以做到这一点,但通常我不建议这样做。

通常调用不带引号的东西意味着对象本身在搜索路径中。在不分配它的情况下执行此操作的一种方法是使用该with()功能。

您可以通过以下方式获得某物的名称而不使其实际存在deparse(substitute(...))

> blah <- function(a) {
    deparse(substitute(a))
  }
> blah(foo) 
[1] "foo"
> foo 
Error: object 'foo' not found

因此,原则上您可以在函数中使用deparse(substitute(...))上述示例中的名称来获取名称,teetor而不是传入名称。

于 2011-02-16T00:58:37.467 回答
4

好吧,我想一种解决方案是:

GLD <- "GLD"
GDX <- "GDX"
teetor(GLD,GDX)     # No need to quote GLD and GDX

转念一想,没关系。

于 2011-02-19T20:31:12.093 回答