2017-11-30 6 views
2

내가 테이블이 '더블'입력 강요 할 수 없습니다 다음과 같습니다 numTable : enter image description here이 오류 메시지를 해석하는 방법 : (목록) 개체가

지금 나는이 칼럼의 각 outiers을 찾으려면을 . 아래에있는 내 코드를 참조하십시오

for (i in names(numTable)) { 
    #calculate mean and std for each column 
    meanValue <- mean(numTable[,i], na.rm=TRUE) 
    stdValue<-sd(numTable[,i],na.rm=TRUE) 
    #Sum up number of outliers for each column 
    print(paste("there are",sum(abs(numTable[,i]-meanValue)>3*stdValue,na.rm = 
TRUE),"outliers in the column",i)) 
} 

하지만 오류 메시지가 :

Error in is.data.frame(x) : (list) object cannot be coerced to type 'double' 

나는 처음에 numTable<-as.data.frame(numTable)를 추가하여이 문제를 해결했습니다. 코드를 작동시키기 위해이 줄을 추가해야하는 이유를 말씀해 주시겠습니까? tbl과 data.frame의 차이점과 관련이 있습니까? 감사합니다. .

+0

'전에? – useR

+0

'class (numT)'를 실행 한 후이 결과가'[1] "tbl_df" "tbl" "data.frame"'됩니다. tbl_df 또는 tbl 또는 data.frame인지 확실하지 않습니다. – Eva

+0

모두 다. 이 경우 헤이든이 답을 갖고 있다고 생각합니다. – useR

답변

3

대괄호에 data.frames이라는 drop이라는 숨겨진 인수가 있는데, 기본값은 TRUE이며, 색인을 생성하는 경우 결과가 벡터로 단순화됩니다. ?'['을 참조하십시오.

그러나 Hadley Wickham은 이것이 예측할 수없는 행동이라고 생각하므로 tbl s 시행 drop = FALSE입니다.

tbl을 계속 사용하고 data.frame으로 변환하지 않으려는 경우. dplyr::pull을 사용하여 단일 열을 벡터로 추출 할 수 있습니다. 즉 : 당신은 data.frame``로 변환`클래스 (classTable) 란 무엇입니까

is.vector(data.frame(a = 1:10, b = letters[1:10])[, 1]) 
#> [1] TRUE 
is.vector(data.frame(a = 1:10, b = letters[1:10])[, 1, drop = FALSE]) 
#> [1] FALSE 
is.vector(dplyr::tibble(a = 1:10, b = letters[1:10])[, 1]) 
#> [1] FALSE 
is.vector(dplyr::pull(dplyr::tibble(a = 1:10, b = letters[1:10]), 1)) 
#> [1] TRUE 
+0

좋아요! 그거야. 고맙습니다. – Eva