Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何获取一个字符串,然后调用名为该字符串的数据帧?_R_Quantmod - Fatal编程技术网

R 如何获取一个字符串,然后调用名为该字符串的数据帧?

R 如何获取一个字符串,然后调用名为该字符串的数据帧?,r,quantmod,R,Quantmod,下面的代码返回一个名为“GLD”的字符串 CatItUp这很棘手,因为quantmod创建的数据帧的名称与指定给x的字符串相同。因此,首先需要一个字符串值,然后调用一个名为x的数据帧。这正是do.call()的帮助所在 IAmMoney <- function(x) { require("quantmod") getSymbols(x) tail(get(x)) # changed to get(x) per Ahala's input below.

下面的代码返回一个名为“GLD”的字符串


CatItUp这很棘手,因为quantmod创建的数据帧的名称与指定给x的字符串相同。因此,首先需要一个字符串值,然后调用一个名为x的数据帧。这正是do.call()的帮助所在

IAmMoney <- function(x) {
    require("quantmod")
    getSymbols(x)
    tail(get(x))
    # changed to get(x) per Ahala's input below. 
    # if you had many params you were passing, do.call()
    # might make more sense
}

IAmMoney("GLD")

IAmMoney这很棘手,因为quantmod创建的数据帧的名称与指定给x的字符串相同。因此,首先需要一个字符串值,然后调用一个名为x的数据帧。这正是do.call()的帮助所在

IAmMoney <- function(x) {
    require("quantmod")
    getSymbols(x)
    tail(get(x))
    # changed to get(x) per Ahala's input below. 
    # if you had many params you were passing, do.call()
    # might make more sense
}

IAmMoney("GLD")

IAmMoneyWill
tail(get(x))
work?

Will
tail(get(x))
work?

你不是简单地忽略了
getSymbols()
有一个选项
auto.assign

因此,您可能需要以下内容:

R> library(quantmod)
R> silly <- function(sym) {
+     x <- getSymbols(sym, auto.assign=FALSE)
+     tail(x)
+ }
R> silly("IBM")
           IBM.Open IBM.High IBM.Low IBM.Close IBM.Volume IBM.Adjusted
2010-12-03   144.25   145.68  144.25    145.38    3710600       145.38
2010-12-06   144.54   145.87  144.52    144.99    3321800       144.99
2010-12-07   146.02   146.30  143.87    144.02    4828600       144.02
2010-12-08   144.35   145.65  143.84    144.98    4961400       144.98
2010-12-09   145.94   145.94  143.52    144.30    4405300       144.30
2010-12-10   144.88   144.95  143.73    144.82    3503800       144.82
R> silly("C")
           C.Open C.High C.Low C.Close   C.Volume C.Adjusted
2010-12-03   4.38   4.46  4.35    4.45  360277300       4.45
2010-12-06   4.45   4.50  4.43    4.45  445170000       4.45
2010-12-07   4.55   4.65  4.54    4.62 3265796000       4.62
2010-12-08   4.61   4.64  4.55    4.64  913820900       4.64
2010-12-09   4.68   4.71  4.64    4.69  731119000       4.69
2010-12-10   4.70   4.77  4.66    4.77  763156100       4.77
R> 
R>库(quantmod)
R> 傻傻的(“C”)
C.打开C.高C.低C.关闭C.音量C.调整
2010-12-03   4.38   4.46  4.35    4.45  360277300       4.45
2010-12-06   4.45   4.50  4.43    4.45  445170000       4.45
2010-12-07   4.55   4.65  4.54    4.62 3265796000       4.62
2010-12-08   4.61   4.64  4.55    4.64  913820900       4.64
2010-12-09   4.68   4.71  4.64    4.69  731119000       4.69
2010-12-10   4.70   4.77  4.66    4.77  763156100       4.77
R>
getSymbols()
默认行为“我将把它作为一个新变量粘贴到您的环境中”或多或少是一个设计缺陷,我记得,这也是公认的缺陷


因此,可以通过
auto.assign
更改行为

您不是忽略了一个事实吗
getSymbols()
有一个选项
auto.assign

因此,您可能需要以下内容:

R> library(quantmod)
R> silly <- function(sym) {
+     x <- getSymbols(sym, auto.assign=FALSE)
+     tail(x)
+ }
R> silly("IBM")
           IBM.Open IBM.High IBM.Low IBM.Close IBM.Volume IBM.Adjusted
2010-12-03   144.25   145.68  144.25    145.38    3710600       145.38
2010-12-06   144.54   145.87  144.52    144.99    3321800       144.99
2010-12-07   146.02   146.30  143.87    144.02    4828600       144.02
2010-12-08   144.35   145.65  143.84    144.98    4961400       144.98
2010-12-09   145.94   145.94  143.52    144.30    4405300       144.30
2010-12-10   144.88   144.95  143.73    144.82    3503800       144.82
R> silly("C")
           C.Open C.High C.Low C.Close   C.Volume C.Adjusted
2010-12-03   4.38   4.46  4.35    4.45  360277300       4.45
2010-12-06   4.45   4.50  4.43    4.45  445170000       4.45
2010-12-07   4.55   4.65  4.54    4.62 3265796000       4.62
2010-12-08   4.61   4.64  4.55    4.64  913820900       4.64
2010-12-09   4.68   4.71  4.64    4.69  731119000       4.69
2010-12-10   4.70   4.77  4.66    4.77  763156100       4.77
R> 
R>库(quantmod)
R> 傻傻的(“C”)
C.打开C.高C.低C.关闭C.音量C.调整
2010-12-03   4.38   4.46  4.35    4.45  360277300       4.45
2010-12-06   4.45   4.50  4.43    4.45  445170000       4.45
2010-12-07   4.55   4.65  4.54    4.62 3265796000       4.62
2010-12-08   4.61   4.64  4.55    4.64  913820900       4.64
2010-12-09   4.68   4.71  4.64    4.69  731119000       4.69
2010-12-10   4.70   4.77  4.66    4.77  763156100       4.77
R>
getSymbols()
默认行为“我将把它作为一个新变量粘贴到您的环境中”或多或少是一个设计缺陷,我记得,这也是公认的缺陷


因此,可以通过
auto.assign
更改行为

我冒昧地尝试重新命名这个问题,以反映你问题的症结所在。我不确定我是帮助了还是阻碍了。我冒昧地尝试重新命名这个问题,以反映你问题的症结所在。我不确定我是帮助了还是阻碍了。很好。它起作用了。我需要理解那一行紧凑的代码。do.call()也花了我一段时间才完全理解。那么getSymbols接受字符串并创建GLD对象?要再次将“GLD”用作简单字符串而不是数据帧,您需要将其强制回一个名称吗?为什么列表?do.call()需要一个列表作为第二个参数,所以忘记这个问题。是的,getSymbols()接受一个字符串。如果它找到一个与字符串匹配的符号,它将生成一个同名的数据帧。因此,当调用tail()时,就是在跟踪数据帧。因此,在这种情况下,您不希望传递tail()字符串。您希望将数据帧的名称传递给它。这就是do.call的作用。do.call()唯一棘手的一点是,它希望参数作为一个list.Nice。它起作用了。我需要理解那一行紧凑的代码。do.call()也花了我一段时间才完全理解。那么getSymbols接受字符串并创建GLD对象?要再次将“GLD”用作简单字符串而不是数据帧,您需要将其强制回一个名称吗?为什么列表?do.call()需要一个列表作为第二个参数,所以忘记这个问题。是的,getSymbols()接受一个字符串。如果它找到一个与字符串匹配的符号,它将生成一个同名的数据帧。因此,当调用tail()时,就是在跟踪数据帧。因此,在这种情况下,您不希望传递tail()字符串。您希望将数据帧的名称传递给它。这就是do.call的作用。do.call()唯一棘手的一点是它希望将参数作为列表。谢谢。在我的脑海里,我一直在想,必须有一个“更好的方法”。谢谢,这将是有用的非quantmod函数在未来。谢谢阿哈拉。在我的脑海里,我一直在想必须有一个“更好的方法”。谢谢,这对将来的非quantmod函数会很有用。谢谢你指出这一点。我在文档中完全忽略了这一点。所以我们可以简单地做
tail(getSymbols(“GLD”,auto.assign=FALSE))
Nifty。感谢您的澄清。这是quantmod软件包的完美选择。简单又干净。谢谢你指出这一点。我在文档中完全忽略了这一点。所以我们可以简单地做
tail(getSymbols(“GLD”,auto.assign=FALSE))
Nifty。感谢您的澄清。这是quantmod软件包的完美选择。简单干净。
R> library(quantmod)
R> silly <- function(sym) {
+     x <- getSymbols(sym, auto.assign=FALSE)
+     tail(x)
+ }
R> silly("IBM")
           IBM.Open IBM.High IBM.Low IBM.Close IBM.Volume IBM.Adjusted
2010-12-03   144.25   145.68  144.25    145.38    3710600       145.38
2010-12-06   144.54   145.87  144.52    144.99    3321800       144.99
2010-12-07   146.02   146.30  143.87    144.02    4828600       144.02
2010-12-08   144.35   145.65  143.84    144.98    4961400       144.98
2010-12-09   145.94   145.94  143.52    144.30    4405300       144.30
2010-12-10   144.88   144.95  143.73    144.82    3503800       144.82
R> silly("C")
           C.Open C.High C.Low C.Close   C.Volume C.Adjusted
2010-12-03   4.38   4.46  4.35    4.45  360277300       4.45
2010-12-06   4.45   4.50  4.43    4.45  445170000       4.45
2010-12-07   4.55   4.65  4.54    4.62 3265796000       4.62
2010-12-08   4.61   4.64  4.55    4.64  913820900       4.64
2010-12-09   4.68   4.71  4.64    4.69  731119000       4.69
2010-12-10   4.70   4.77  4.66    4.77  763156100       4.77
R>