R 使用带有变量的quantmod中的子集运算符::

R 使用带有变量的quantmod中的子集运算符::,r,subset,quantmod,R,Subset,Quantmod,如何应用用户初始化的日期变量作为R包quantmod中子集运算符::的开始值和结束值 例如,当我应用用户初始化的日期变量时 end.date <- Sys.Date() start.date <- end.date - 5*365 #5- years to-date start.date.char <- as.character(start.date) end.date.char <- as.character(end.date) 此外:警告

如何应用用户初始化的日期变量作为R包quantmod中子集运算符::的开始值和结束值

例如,当我应用用户初始化的日期变量时

end.date        <- Sys.Date()
start.date      <- end.date - 5*365 #5- years to-date
start.date.char <- as.character(start.date)
end.date.char   <- as.character(end.date)
此外:警告信息:

1: In as_numeric(YYYY) : NAs introduced by coercion
2: In as_numeric(MM) : NAs introduced by coercion
3: In as_numeric(DD) : NAs introduced by coercion
4: In as_numeric(YYYY) : NAs introduced by coercion
5: In as_numeric(MM) : NAs introduced by coercion
6: In as_numeric(DD) : NAs introduced by coercion
我确信这是一个基本问题,但我是一个新手。

您当前对[.xts的参数只是字符值'start.date.char::end.date.char',不会进一步计算,因为R不是宏语言。请尝试构建所需的字符值,我相信是:2011-08-28::2016-08-26。因此,这成功了:

GILD.5YTD<-GILD[paste(start.date.char, end.date.char, sep="::")]

str(GILD.5YTD)
#-------
An ‘xts’ object on 2011-08-29/2016-08-25 containing:
  Data: num [1:1257, 1:6] 39 39.7 40.2 39.8 39 ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:6] "GILD.Open" "GILD.High" "GILD.Low" "GILD.Close" ...
  Indexed by objects of class: [Date] TZ: UTC
  xts Attributes:  
List of 2
 $ src    : chr "yahoo"
 $ updated: POSIXct[1:1], format: "2016-08-26 17:00:52"
因此,从技术上讲::不是充当R运算符,而是由[.xts函数解析。Pkg:quantmod构建在xts;包的顶部。::函数实际上是用于对已安装包的导出函数进行包定向函数访问。

您当前的参数[.xts只是字符值'start.date.char::end.date.char',不会进一步求值,因为R不是宏语言。请尝试构建所需的字符值,我认为是:2011-08-28::2016-08-26。因此,这一操作成功:

GILD.5YTD<-GILD[paste(start.date.char, end.date.char, sep="::")]

str(GILD.5YTD)
#-------
An ‘xts’ object on 2011-08-29/2016-08-25 containing:
  Data: num [1:1257, 1:6] 39 39.7 40.2 39.8 39 ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:6] "GILD.Open" "GILD.High" "GILD.Low" "GILD.Close" ...
  Indexed by objects of class: [Date] TZ: UTC
  xts Attributes:  
List of 2
 $ src    : chr "yahoo"
 $ updated: POSIXct[1:1], format: "2016-08-26 17:00:52"

因此,从技术上讲::不是充当R运算符,而是由[.xts function.Pkg:quantmod构建在xts;包之上。::函数实际上是用于对已安装包的导出函数进行包定向函数访问。

有一些方便的高级函数,可以将xts对象子集化为返回的子对象,例如,通过quantmod的getSymbols

对于基于时间的子集,quantmod自动加载的xts包中的最后一个函数非常方便:

library(quantmod)
getSymbols("GILD",src="yahoo")
GILD_last5Years <- last(GILD, "5 years")
#> head(GILD_last5Years)
#           GILD.Open GILD.High GILD.Low GILD.Close GILD.Volume GILD.Adjusted
#2012-01-03     41.46     41.99    41.35      41.86    19564000      20.46895
#2012-01-04     41.95     42.06    41.70      42.02    16236000      20.54719
#2012-01-05     42.04     42.97    42.00      42.52    18431800      20.79168
#2012-01-06     42.38     43.10    42.20      42.78    15542000      20.91882
#2012-01-09     42.49     42.99    42.35      42.73    16801200      20.89437
#2012-01-10     43.10     45.04    42.94      44.25    30110000      21.63763

这可以首先与等效函数结合,以选择序列中的特定时间跨度。

有一些方便的高级函数,用于将xts对象子集为返回的对象,例如,通过quantmod的getSymbols

对于基于时间的子集,quantmod自动加载的xts包中的最后一个函数非常方便:

library(quantmod)
getSymbols("GILD",src="yahoo")
GILD_last5Years <- last(GILD, "5 years")
#> head(GILD_last5Years)
#           GILD.Open GILD.High GILD.Low GILD.Close GILD.Volume GILD.Adjusted
#2012-01-03     41.46     41.99    41.35      41.86    19564000      20.46895
#2012-01-04     41.95     42.06    41.70      42.02    16236000      20.54719
#2012-01-05     42.04     42.97    42.00      42.52    18431800      20.79168
#2012-01-06     42.38     43.10    42.20      42.78    15542000      20.91882
#2012-01-09     42.49     42.99    42.35      42.73    16801200      20.89437
#2012-01-10     43.10     45.04    42.94      44.25    30110000      21.63763

这可以与等效函数结合使用,首先选择序列中的特定时间跨度。

出现错误的原因是您在字符串中提交的变量无法工作。顺便说一句,您不必像示例中那样将日期转换为as.character,因为粘贴就可以了。使用粘贴0like so将相应地对您的数据进行子集划分:

GILD.5YTD<-GILD[paste0(start.date.char,'::',end.date.char)]

出现错误的原因是您提交的变量包含在一个无法工作的字符串中。顺便说一句,您不必像示例中那样将日期转换为as.character,因为粘贴可以帮助您完成此操作。使用类似paste0的方式将相应地对数据进行子集化:

GILD.5YTD<-GILD[paste0(start.date.char,'::',end.date.char)]

阅读?[.xts,您可能正在寻找GILD[pastestart.date.char,end.date.char,sep=/]?这就可以了。感谢阅读?[.xts,您可能正在寻找GILD[pastestart.date.char,end.date.char,sep=/]?这就行了。感谢@alexis_las对我的问题提出的评论。你还澄清了发生的事情:“stuff”评估的是stuff,而不是赋值。如果你不介意的话,对于新手来说,什么是理解R的语法细微差别的好参考,例如[.xts哪一种读起来像xts是运算符的成员[如果您想了解符号,请在R中搜索泛型函数。[函数是泛型的,如所提页面详细信息部分的第一句所述?“['因此具有用于特定类的项的方法。类xts'的对象(正如GILD一样)将由适合它们的特定方法进行处理,并且R的调度引擎所查找的实际函数名为[.xts.Typing'控制台上的[.xts'将显示其帮助页面这与@alexis_las对我的问题提出的评论一样有效。您还澄清了发生的事情:“stuff”的计算结果是stuff,而不是赋值。如果您不介意的话,对于新手来说,什么是理解R的语法细微差别的好参考,例如[.xts哪一种读起来像xts是运算符的成员[如果您想了解符号,请在R中搜索泛型函数。[函数是泛型的,如所提页面详细信息部分的第一句所述?“['因此具有用于特定类的项的方法。类xts'的对象(如GILD)将由适合它们的特定方法处理,并且R的调度引擎查找的实际函数名为[.xts.Typing?“[.xts”将在控制台上显示其帮助页