>

다음 코드를 사용합니다 ( 링크 )를 통해 dataframe 라는 가상의 df 데이터의 잠재적으로 문제가되는 부분을 정리합니다. :

dataframe <- fread(
    "A   B  B.x  C  D   E   iso   year   
     0   3   NA  1  NA  NA  NLD   2009   
     1   4   NA  2  NA  NA  NLD   2009   
     0   5   NA  3  NA  NA  AUS   2011   
     1   5   NA  4  NA  NA  AUS   2011   
     0   0   NA  7  NA  NA  NLD   2008   
     1   1   NA  1  NA  NA  NLD   2008   
     0   1   NA  3  NA  NA  AUS   2012   
     0   NA  1   NA  1  NA  ECU   2009   
     1   NA  0   NA  2  0   ECU   2009   
     0   NA  0   NA  3  0   BRA   2011   
     1   NA  0   NA  4  0   BRA   2011   
     0   NA  1   NA  7  NA  ECU   2008   
     1   NA  0   NA  1  0   ECU   2008   
     0   NA  0   NA  3  2   BRA   2012   
     1   NA  0   NA  4  NA  BRA   2012",
   header = TRUE
)
dataframe <- as.data.frame(dataframe)
## get mode of all vars
var_mode <- sapply(dataframe, mode)
## produce error if complex or raw is found
if (any(var_mode %in% c("complex", "raw"))) stop("complex or raw not allowed!")
## get class of all vars
var_class <- sapply(dataframe, class)
## produce error if an "AsIs" object has "logical" or "character" mode
if (any(var_mode[var_class == "AsIs"] %in% c("logical", "character"))) {
  stop("matrix variables with 'AsIs' class must be 'numeric'")
  }
## identify columns that needs be coerced to factors
ind1 <- which(var_mode %in% c("logical", "character"))
## coerce logical / character to factor with `as.factor`
dataframe[ind1] <- lapply(dataframe[ind1], as.factor)

많이 사용함에 따라 함수에 넣고 다음을 시도하는 것이 좋습니다.

cleanfunction <- function(dataframe) {
dataframe <- as.data.frame(dataframe)
## get mode of all vars
var_mode <- sapply(dataframe, mode)
## produce error if complex or raw is found
if (any(var_mode %in% c("complex", "raw"))) stop("complex or raw not allowed!")
## get class of all vars
var_class <- sapply(dataframe, class)
## produce error if an "AsIs" object has "logical" or "character" mode
if (any(var_mode[var_class == "AsIs"] %in% c("logical", "character"))) {
  stop("matrix variables with 'AsIs' class must be 'numeric'")
  }
## identify columns that needs be coerced to factors
ind1 <- which(var_mode %in% c("logical", "character"))
## coerce logical / character to factor with `as.factor`
dataframe[ind1] <- lapply(dataframe[ind1], as.factor)
}
dfclean <- cleanfunction(dataframe)

그러나

이러한 변수를 인자로 변환 한 데이터 프레임 대신 인자로 변환 된 변수 목록을 만들었습니다.

어떻게 해결할 수 있습니까?


  • 답변 # 1

    함수는 마지막으로 평가 된 식의 값을 반환합니다. 이 경우 마지막으로 증발 된 표현은

    dataframe[ind1] <- lapply(dataframe[ind1], as.factor)
    
    

    <-  연산은 항상 오른쪽 값을 반환합니다. 그래서 당신은 단지 lapply 에서 결과를 반환합니다 업데이트 된 dataframe 가 아님 .

    다른 줄을 추가하면됩니다

    return(dataframe)
    
    

    또는 단지

    dataframe
    
    

    기능 끝까지

관련 자료

  • 이전 iphone - 프로그래밍 방식으로 UITableView에서 셀 삭제
  • 다음 haskell - 기호/공백이 아닌 문자 만 어떻게 이동할 수 있습니까?