START <- '2013-09-03'
symbolList <- list("AAPL", "MSFT", "TSLA", "GOOG", "IBM")
for (ii in 1:length(symbolList))
{
getSymbols(paste(symbolList[ii]), src='yahoo', from=START)
}
이렇게하면 각각 6 개의 열이있는 5 개의 xts 개체가 생성됩니다. mergedData 을 만들고 싶지만 아래에서 수행하는 무차별 대입 방식이 아닌 symbolList 를 참조 하여 만듭니다 .
mergedData <- merge(AAPL[,6], MSFT[,6], TSLA[,6], GOOG[,6], IBM[,6])
colnames(mergedData) <- c("Apple", "Microsoft", "Tesla", "Google", "IBM")
symbolList 를 반복하는 메서드를 사용하여 위의 마지막 두 줄을 어떻게 다시 작성 합니까? 또한 작성된 xts가 따옴표가없는 AAPL, MSFT 등이므로 따옴표가있는 원래 목록이 내 문제의 일부일 수 있다고 확신합니다. 그 문제를 어떻게 해결합니까?
감사!
넌 있었다 하여 그 마지막 두 라인 물품 get
(심볼 심볼 이름으로 변환한다) do.call
(리스트에 함수를 적용) 및 lapply
(a [다른] 함수의 결과의리스트를 작성한다) :
mergedData <- do.call(merge, lapply(symbolList, function(sym) { get(sym)[,6] }) )
colnames(mergedData) <- c("Apple", "Microsoft", "Tesla", "Google", "IBM")
그러나 auto.assign=FALSE
in 을 사용하여 전체 프로세스를 상당히 단순화 할 수도 있습니다 getSymbols
. (또한 symbolList를 목록에서 명명 된 벡터로 변경했습니다. 정말 필요한 모든 것입니다.) :
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)
또는 정말 조밀 한 코드 를 원한다면 :
mergedData <- do.call(merge, lapply(symbolList, function(sym) {
setNames(getSymbols(sym, src='yahoo', from=START, auto.assign=FALSE)[,6], names(sym))
}))
부록-lapply 호출에 대한 설명 (귀하의 의견에 대한 응답)
이 줄에서 :
dataList <- lapply(symbolList, function(sym) {
setNames(getSymbols(sym, src='yahoo', from=START, auto.assign=FALSE)[,6], names(sym))
})
lapply에 벡터 symbolList
(목록이 될 수 있음)와 함수라는 두 개의 인수를 전달했습니다 function(sym) { ... }
. 미리 정의 된 함수를 전달할 수 있습니다. 예를 들어 각 기호의 문자 수를 세고 싶다면 다음을 전달할 수 있습니다 nchar
.
lapply(symbolList, nchar)
그리고 그것은 호출과 동일했을 것입니다
list(Apple=nchar(symbolList[[1]]), Microsoft=nchar(symbolList[[2]]), Tesla=nchar(symbolList[[3]]), Google=nchar(symbolList[[4]]), IBM=nchar(symbolList[[5]]))
둘 다 양식 목록을 반환합니다.
list(Apple=4, Microsoft=4, Tesla=4, Google=4, IBM=3)
그러나을 사용하는 대신 nchar
내 자신의 함수를 작성했습니다. 이 함수는 nchar
예제 에서 4, 4, 4, 4, 3 대신 원하는 것을 반환합니다 . 함수는 별도로 정의 할 수 있습니다.
myfun <- function(sym) {
setNames(getSymbols(sym, src='yahoo', from=START, auto.assign=FALSE)[,6], names(sym))
}
그리고 우리는 통과 수 myfun
에 lapply
우리가 원하는 결과를 얻을 수 :
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
여기에 복사 한 원래 답변 의 호출을 이해하거나 수정할 수 있기를 바랍니다 .
dataList <- lapply(symbolList, function(sym) {
setNames(getSymbols(sym, src='yahoo', from=START, auto.assign=FALSE)[,6], names(sym))
})
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다