좋아, 내가 파일의 디렉토리가 있다고 말하면 각각의 모든 파일에 대해 동일한 명령을 실행하고 싶다. 아래 내 디렉토리에 10 개 파일은 여기에 있지만 데이터 프레임의 목록으로 표현하는 것, 예를 들어 있습니다 :오류 후 처리를 계속하는 루프
# Create dummy files
file1 <- as.data.frame(runif(100, 0,100))
file2 <- as.data.frame(runif(100, 0,100))
file3 <- as.data.frame(runif(100, 0,100))
file4 <- as.data.frame(runif(12, 0,100))
file5 <- as.data.frame(runif(100, 0,100))
file6 <- as.data.frame(runif(15, 0,100))
file7 <- as.data.frame(runif(100, 0,100))
file8 <- as.data.frame(runif(8, 0,100)) # This is the df that its intended to fail on
file9 <- as.data.frame(runif(100, 0,100))
file10 <- as.data.frame(runif(100, 0,100))
file11 <- as.data.frame(runif(100, 0,100))
# Lets pretend the files are .csv files on my HDD
# But here will make a list of data frames
file.list <- list(file1,file2,file3,file4,file5,file6,file7,file8,file9,file10)
# Rename column names for all 10 df
Names <- function(x) {
names(x) <- c("Close")
return(x)
}
# Apply name change to all 10 data frames
file.list <- lapply(file.list, Names)
좋아, 그래서 지금 우리는 내가 통해 반복 할 때의 데이터가 각 파일에 내가 소원 2 ~ 12 단순 이동 평균을 계산합니다.
첫 번째는 file.list [[i]] (또는 데이터 프레임 1)에서 시작하는 함수에서 단순 이동 평균 프로 시저를 래핑합니다. 내 진짜 문제는 이것들이 내 디렉토리의 파일이지만, 예를 들어 똑같은 것이다.
# Create function for performing commands.
genSMA = function(x){
nextfile <- data.frame(file.list[[i]],stringsAsFactors=FALSE)
new.df <- data.frame(nextfile)
# Load packages
require(TTR)
# Use TTR package to create rolling SMA n day moving average
getSMA <- function(numdays) {
function(new.df) {
SMA(new.df[,"Close"], numdays) # Calls TTR package to create SMA
}
}
# Create a matrix to put the SMAs in
sma.matrix <- matrix(nrow=nrow(new.df), ncol=0)
tail(sma.matrix)
# Loop for filling it
for (i in 2:12) {
sma.matrix <- cbind(sma.matrix, getSMA(i)(new.df))
}
# Rename columns
colnames(sma.matrix) <- sapply(2:12, function(n)paste("close.sma.n", n, sep=""))
# Bind to existing dataframe
new.df <- cbind(new.df, sma.matrix)
}
는 지금은 모든 데이터 프레임을 통해이 기능을 실행하는 for 루프를 호출
for (i in 1:length(file.list)){
genSMA(file.list[[i]])
}
확인이 그것이 실패하기 위해서는 설정입니다. 그것은 데이터 프레임 (8)에 실패하고이 오류 메시지를 출력한다 : SMA 9,10,11,12-의 단순 이동 평균을 계산하기에 충분한 데이터가 없기 때문에
Error in runSum(x, n) : n = 9 is outside valid range: [1, 8]
이입니다. 이들을 계산하기 위해서는 9,10,11,12 데이터 포인트보다 긴 데이터가 필요합니다.
내 질문은 :
내가 나머지 파일을 통해 루프를 계속 오류 메시지를 무시하고이 코드에 뭔가를 추가하려면 어떻게?
또한 출력을 하나의 데이터 프레임에 저장하는 방법을 모르십니까? 당신은 이것이 실행되고 아무 것도 출력하지 않을 것임을 알게 될 것입니다. 최종 결과를 데이터 프레임에도 저장하는 것이 좋습니다.
그러나, 위의 코드를 실행하고 R에 tryCatch
블록을 사용할 수 있습니다 8.
확인 반복에서 어떤 반복이 실패했는지 알려주고, 나머지 파일도 계속 순환 할 것인가? –
예, 테스트하지 않으시겠습니까? –
예 대답입니다 - 위의 예에서 프로세스가 완료된 후 볼 수 있도록 데이터 프레임에 출력을 저장하는 절차가 있습니까? –