2016-08-26 3 views
0

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 

이 질문이 기본적인 질문이지만 저는 초보자입니다.

+0

읽기 ' ". XTS"'당신은 아마'GILD [붙여 넣기 (start.date.char, end.date.char 9 월을 찾고 수 = "/")]'? –

+0

이것은 일을합니다. 감사합니다 – Cam

답변

2

반환되는 xts 객체를 하위 집합 (예 : quantmod의 getSymbols())을위한 편리한 고급 함수가 있습니다. 이것은 동등한 기능 first()와 결합 될 수

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 

특정 시간 범위를 선택하려면 시간 기반 서브 용

은 (자동 quantmod로드)를 XTS 패키지에서 last() 기능은 매우 유용 시리즈 내에서.

1

[.xts에 대한 귀하의 현재 인수는 문자 값 'start.date.char::end.date.char' 일 뿐이며 R은 매크로 언어가 아니기 때문에 더 이상 평가되지 않습니다. 대신 원하는 문자 값을 작성하십시오. 나는 이것이 "2011-08-28::2016-08-26"이라고 생각합니다. 그래서 성공 : 그래서 기술적 ::는 R 연산자로 작용되지 않지만 [.xts 기능에 의해 해석되는

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" 

. Pkg : quantmod는 xts 패키지 위에 빌드됩니다. "::" 함수는 실제로 설치된 패키지의 내 보낸 함수에 대한 패키지 지향 함수 액세스 용입니다.

+0

@alexis_las가 내 질문에 대한 의견으로 제안한 것과 같은 역할을합니다. 당신은 또한 진행 상황을 분명히했습니다 : ** 'stuff'**는 할당 된 값 대신 ** stuff **로 평가됩니다. 만약 당신이 신경 쓰지 않는다면, 초보자가'[.xts]와 같은 R의 구문적인 뉘앙스를 이해할 수있는 좋은 참고 자료는 무엇입니까 'xts'와 같은 종류의 읽기는 연산자'[' – Cam

+0

If 당신은 표기법에 대해 배우고, "R의 일반 함수"를 검색하고 싶습니다. '[''함수는 ('? '[''로 시작된 페이지의 세부 사항 섹션의 첫 번째 문장에 명시된 바와 같이) 일반 클래스이므로 특정 클래스의 항목에 대한 메소드를 가지고 있습니다. 클래스 "xts"('GILD'와 같이)의 객체는 그들에게 적절한 특정 메소드에 의해 처리 될 것이고 R의 파견 엔진에 의해 조회 된 실제 함수는'[.xts'로 명명됩니다.콘솔에서 xts '가 도움말 페이지를 불러옵니다. –

1

오류의 원인은 작동하지 않는 문자열 내에서 변수를 제출하기 때문입니다. (그런데 붙여 넣기를하면 날짜가 as.character으로 바뀌지 않아도됩니다.) 그래서 따라 데이터를 부분 집합 것 같은 paste0 사용 :

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