2016-08-26 8 views
0

Как применить инициализированные пользователем переменные даты в качестве начального и конечного значений оператора подмножества :: из R-пакета, quantmod?Использование оператора подмножества :: in 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 

Я уверен, что это основной вопрос, но я новичок.

+0

чтения ' " [XTS"', вы, вероятно, будете искать 'позолота [пасты (start.date.char, end.date.char, SEP = "/")] '? –

+0

Выполняет эту работу. Спасибо – Cam

ответ

2

Существуют удобные высокоуровневые функции для подмножества объекта xts, возвращаемого, например, с помощью квантового модуля getSymbols().

Для подмножества на основе времени, то last() функции из пакета XTS (автоматически загружает 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(), чтобы выбрать определенный промежуток времени внутри серии.

1

Ваш текущий аргумент [.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; Функция "::" действительно предназначена для пакетного доступа к функциям для экспортированных функций установленных пакетов.

+0

Это работает так же, как и @alexis_las, как комментарий к моему вопросу. Вы также уточнили, что происходит: ** «материал» ** оценивает ** материал ** вместо назначенных значений. Если вы не возражаете, то, что хорошая новичка для понимания синтаксических нюансов R, таких как '.xts', которые читаются как' xts', является членом оператора '[' – Cam

+0

If вы хотите узнать о нотации, искать «общие функции в R». Функция '[' является общей (как указано в первом предложении раздела «Подробности» страницы, созданного «?» [''), И поэтому имеет методы для элементов определенных классов. Объекты класса «xts» (как и 'GILD') будут обрабатываться конкретным подходящим для них способом, а фактическая функция, которую ищет механизм отправки R, называется' [.xts'. Typing '? '[.xts'' на консоли отобразит страницу справки –

1

Причина ваших ошибок в том, что вы отправляете переменные в строке, которая не может работать. (Кстати, вам не нужно преобразовывать дату в as.character, как в вашем примере, так как вставка сделает это для вас). Использование paste0 как так будет подмножество данных соответственно:

GILD.5YTD<-GILD[paste0(start.date.char,'::',end.date.char)] 
Смежные вопросы