스크립트가 완료되면 모든 작업을 검토 할 수 있도록 스크립트에 각 조인 작업의 입력과 출력을 문서화하는 함수를 작성하려고합니다. 이 작업을 수행 할 때 여분의 일치 등으로 인해 데이터 프레임이 비정상적으로 증가하지 않도록하고 싶습니다.문서화 된 조인 작업을위한 함수 쓰기
지금까지는 각 조인 작업을 수행 할 때마다 수동으로 레이어를 추가했습니다. 그것은 내가하고 싶은 것을 보여줍니다. 먼저 입력 파일 file1
을 가져와 file2
과 결합하고 file3
을 만듭니다. file3
은 file1
과 같은 이름이거나 새 개체 일 수 있습니다. checkmerge
은 각 병합 작업과 함께 더 길어지는 설명서 파일입니다.
merge <- "file1+file2=file3"
count <- nrow(file1)
check_t1 <- data.frame(merge, count)
file3<- join(file1, file2, by = ("firmid", "year"), type = "left")
count <- nrow(file3)
check_t2 <- data.frame(merge, count)
checkmerge <- rbind(checkmerge, check_t1, check_t2)
이것은 잘 작동합니다. 그러나 수동 진행 (a)은 오류의 여지를 만들어 내고, (b) 스크립트를 부 풀리며 읽기 어렵게 만듭니다. 그래서 그 일을하는 함수를 작성하고 싶습니다. 나는 쓰기 기능에 상당히 새로운,하지만 다음 내 접근 (작동하지 않았다)이었다
##Initialize checkmerge file
mergedat <- as.character(NULL)
countdat <- as.numeric(NULL)
checkmerge <- data.frame(mergedat, countdat)
##Define function
fun.docmerge <- function(x, y, z, crit, typ, doc = checkmerge) {
mergedat <- paste(deparse(substitute(x)), "+",
deparse(substitute(y)), "=", z)
countdat <- nrow(x)
check_t1 <- data.frame(mergedat, countdat)
z <- join(x, y, by = crit, type = typ)
countdat <- nrow(z)
check_t2 <- data.frame(mergedat, countdat)
doc <- rbind(doc, check_t1, check_t2)
}
그리고 최초의 수동 방식에서와 동일한 결과를 얻기 위해 전화 :
fun.docmerge(x = file1, y = file2, z = "file3", crit = c("firmid", "year"), typ = "left")
그러나 함수를 호출 할 때 아무 일도 일어나지 않습니다. 따라서 객체는 변경되지 않으며 오류 메시지도 표시되지 않습니다.
이전에 수동으로 복제 한 기능을 조정하려면 어떻게해야합니까?
감사의 질문에 함수를 업데이트했습니다. 그러나 함수를 호출 할 때 아무 일도 일어나지 않습니다. 작업 영역의 객체도 변경되지 않으며 오류 메시지가 표시되지 않습니다. 또한 개체에 이름으로 "병합"을 지정하여 데이터가 잘못 될 위험이 있습니까? 그와 관련하여 어떤 오류 메시지도 표시되지 않았지만 데이터가 손상 될 위험이 있습니까? – deca
'doc'를 반환하려면 함수의 끝에'return (doc)'을 추가해야합니다. –
고마워요! 하지만 이제는 두 가지 문제가 있습니다. 먼저 병합 된 파일 (z)과 업데이트 된 체크 머 파일 (doc)을 반환해야합니다. 두 객체를 반환하려면 어떻게해야합니까? 둘째, 반환은 콘솔의 출력물로 연결됩니다. 콘솔로만 인쇄하는 대신 작업 공간에 저장된 객체를 업데이트하려면 어떻게해야합니까? – deca