넌 (A)의 결과의리스트를 생성한다 (목록에 함수를 적용) (심볼 심볼 이름 변환) get
, do.call
및 lapply
을 (사용 이들 마지막 두 라인을 쓸 수있다 [다른] 기능) :
이
mergedData <- do.call(merge, lapply(symbolList, function(sym) { get(sym)[,6] }))
colnames(mergedData) <- c("Apple", "Microsoft", "Tesla", "Google", "IBM")
그러나 당신은 또한 상당히 getSymbols
에 auto.assign=FALSE
를 사용하여 전체 프로세스를 단순화 할 수있다. (. 나는 또한 정말 당신이 필요로하는 모든 것입니다 명명 된 벡터로 목록에서 symbolList을 변경했습니다) :
mergedData <- do.call(merge, lapply(symbolList, function(sym) {
setNames(getSymbols(sym, src='yahoo', from=START, auto.assign=FALSE)[,6], names(sym))
}))
:
library(quantmod)
START <- '2013-09-03'
symbolList <- c(Apple="AAPL", Microsoft="MSFT", Tesla="TSLA", Google="GOOG", IBM="IBM")
dataList <- lapply(symbolList, function(sym) {
setNames(getSymbols(sym, src='yahoo', from=START, auto.assign=FALSE)[,6], names(sym))
})
mergedData <- do.call(merge, dataList)
을 또는 당신은 정말 고밀도 코드를 를 원하는 경우
부록 - 전화 문의 (귀하의 의견에 대한 답변)
본문 내용 :
dataList <- lapply(symbolList, function(sym) {
setNames(getSymbols(sym, src='yahoo', from=START, auto.assign=FALSE)[,6], names(sym))
})
lapply에 두 개의 인수를 전달했습니다. 벡터는 symbolList
(목록 일 수 있음)과 function(sym) { ... }
입니다.
lapply(symbolList, nchar)
그것은 호출과 동일했을 것이다 : 나는 각 기호의 문자 수를 계산하기를 원한다면, 내가 nchar
에 통과 한 수 - 예를 들어, 내가 미리 정의 함수를 통과 할 수 모두가 양식
list(Apple=4, Microsoft=4, Tesla=4, Google=4, IBM=3)
하지만 그 대신 nchar
를 사용하는의 목록을 반환
는 list(Apple=nchar(symbolList[[1]]), Microsoft=nchar(symbolList[[2]]), Tesla=nchar(symbolList[[3]]), Google=nchar(symbolList[[4]]), IBM=nchar(symbolList[[5]]))
, 나는 내 자신의 기능을 썼다. 이 함수는 nchar
예제에서 4, 4, 4, 4 및 3 대신에 원하는 것을 반환합니다.이 기능은 별도로 정의 할 수 있습니다 :
myfun <- function(sym) {
setNames(getSymbols(sym, src='yahoo', from=START, auto.assign=FALSE)[,6], names(sym))
}
그리고 우리는 우리가 원하는 결과를 얻을 수 lapply
-myfun
을 통과 할 수 :
dataList <- lapply(symbolList, myfun)
이 경우 보다는 4, 4, 4, 4 , 3, xts 객체 목록을 얻습니다. 우리는 또한 같은 목록이 방법을 구축 할 수 :
dataList2 <- list(Apple=myfun(symbolList[[1]]), Microsoft=myfun(symbolList[[2]]), Tesla=myfun(symbolList[[3]]), Google=myfun(symbolList[[4]]), IBM=myfun(symbolList[[5]]))
하지만 물론 lapply
버전 목록 요소의 수와 이름에 대한 깨끗하고 유연
. 실제로 변수 (이 경우 myfun
)에 함수를 할당 한 다음이 함수를 lapply
에 전달하는 것은 약간 힘든 일입니다. 그래서 원래의 대답에서 나는 그 이름을주지 않고 lapply
호출 내에서 함수를 정의하기로 결정했습니다. myfun
및 function(sym) { ... }
은 동일한 함수 객체입니다. 정보 감안할 때, 난 당신이 지금 내 원래의 대답에서 lapply
전화를 이해 (또는 수정) 할 수 있기를 바랍니다, 여기에 복사 :
# easier if this is a character vector instead of a list
symbolList <- c("AAPL", "MSFT", "TSLA", "GOOG", "IBM")
# corresponding vector of company names
symbolNames <- c("Apple", "Microsoft", "Tesla", "Google", "IBM")
e <- new.env() # new environment
getSymbols(symbolList, from=START, env=e) # store symbols in 'e'
# eapply() loops over all objects in 'e' and applies the Ad() function
# objects in 'e' won't be in a known order, so we order by symbolList
# then we merge and set the column names to the company names
mergedData <- setNames(do.call(merge, eapply(e, Ad)[symbolList]), symbolNames)
환상적인 : 여기
– DolemiteMofo도와 줘서 기쁩니다! 함수 (sym) 비트를 설명하려고이 부록에 부록을 추가했습니다. – pangia
많은 감사합니다! 설명에 감사드립니다 – DolemiteMofo