在带有变量的 quantmod 中使用子集运算符 ::
Using the subsetting operator :: in quantmod with variables
如何应用用户初始化的日期变量作为 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)
获取 5 年的股票数据
library(quantmod)
getSymbols("GILD",src="yahoo")
GILD.5YTD <- GILD['start.date.char::end.date.char']
我收到以下错误:
Error in if (length(c(year, month, day, hour, min, sec))
== 6 && c(year, :
missing value where TRUE/FALSE needed
此外:警告信息:
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 对象进行子集化,例如 quantmod 的 getSymbols()
。
对于基于时间的子集,xts 包中的 last()
函数(由 quantmod 自动加载)非常方便:
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
这可以与等效函数 first()
相结合,以 select 系列中的特定时间跨度。
您出错的原因是您提交的字符串中的变量不起作用。 (顺便说一句,您不必像示例中那样将日期转换为 as.character
,因为粘贴会为您完成)。像这样使用 paste0
将相应地对您的数据进行子集化:
GILD.5YTD<-GILD[paste0(start.date.char,'::',end.date.char)]
如何应用用户初始化的日期变量作为 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)
获取 5 年的股票数据
library(quantmod)
getSymbols("GILD",src="yahoo")
GILD.5YTD <- GILD['start.date.char::end.date.char']
我收到以下错误:
Error in if (length(c(year, month, day, hour, min, sec))
== 6 && c(year, :
missing value where TRUE/FALSE needed
此外:警告信息:
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 对象进行子集化,例如 quantmod 的 getSymbols()
。
对于基于时间的子集,xts 包中的 last()
函数(由 quantmod 自动加载)非常方便:
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
这可以与等效函数 first()
相结合,以 select 系列中的特定时间跨度。
您出错的原因是您提交的字符串中的变量不起作用。 (顺便说一句,您不必像示例中那样将日期转换为 as.character
,因为粘贴会为您完成)。像这样使用 paste0
将相应地对您的数据进行子集化:
GILD.5YTD<-GILD[paste0(start.date.char,'::',end.date.char)]