[r] 여러 경고“알 수없는 열”수정

모든 유형의 명령 (예 : 패키지에 업데이트 설치에 대한 str (x))에 대해 “알 수없는 열”이라는 여러 경고가 지속적으로 표시되며이를 디버깅하거나 수정하는 방법을 잘 모르겠습니다.

“알 수없는 열”이라는 경고는 내가 이름을 바꾼 tbl_df의 변수와 명확하게 관련되어 있지만 tbl_df와 관련이없는 것처럼 보이는 모든 종류의 명령에서 경고가 나타납니다 (예 : 패키지에 업데이트 설치, str (x), 여기서 x는 단순히 문자형 벡터).



답변

이는 RStudio의 진단 도구 (코드에 경고 및 가능한 실수를 표시하는 도구)의 문제입니다. RStudio v1.1.103 이상에서 @ kevin-ushey 에 의해이 커밋 에서 부분적으로 수정되었습니다 . 경고는 여전히 발생하지만 빈도는 적지 만 수정은 부분적입니다. 이 문제는 https://github.com/rstudio/rstudio/issues/7372 에서 재현 가능한 예제로보고 되었으며 RStudio v1.4 풀 요청 에서 수정되었습니다 (출시 예정).

몇 가지 해결 방법이 있으며 원하는 솔루션을 선택하십시오.

  • 기본 설정 / 코드 / 진단의 모든 파일에 대한 코드 진단을 비활성화합니다.

  • 특정 파일에 대한 모든 진단을 비활성화합니다 :

    열린 파일의 시작 부분에 추가하십시오 :

     # !diagnostics off

    그런 다음 파일을 저장하면 경고가 더 이상 표시되지 않습니다.

  • 경고를 유발하는 변수에 대한 진단을 비활성화합니다

    열린 파일의 시작 부분에 추가하십시오 :

     # !diagnostics suppress=<comma-separated list of variables>

    그런 다음 파일을 저장하면 경고가 더 이상 표시되지 않습니다.

RStudio의 진단 도구가 소스 코드를 분석하여 오류를 감지하고 진단 검사를 수행 할 때 초기화되지 않은 티블의 열에 액세스하여 경고를 표시하기 때문에 경고가 나타납니다. 관련이없는 항목을 실행하기 때문에 경고가 표시되지 않습니다. RStudio 진단 프로그램이 실행될 때 (파일을 저장 한 후 수정 한 경우 무언가를 실행할 때) 경고가 표시됩니다.


답변

같은 문제가 발생했는데 왜 그런지 모르겠지만 문제 가 발생 했을 때 핀 다운 하여 문제가 발생하는 것을 막을 수있었습니다.

문제는 인덱싱에서 파생 된 새 열을 기본 R 데이터 프레임과 Tibble 데이터 프레임에 추가하는 것 같습니다. age기본 R 데이터 프레임에 새 열 ( )을 추가하는 다음 예를 보자 .

base_df <- data.frame(id = c(1:3), name = c("mary", "jill","steve"))

base_df$age[base_df$name == "mary"] <- 47

경고를 반환하지 않고 작동합니다. 그러나 똑딱 거리는 소리로 똑같이하면 경고가 발생합니다 (따라서 이상하고, 도발되지 않은 여러 경고 문제가 발생한다고 생각합니다).

library(tibble)

tibble_df <- tibble(id = c(1:3), name = c("mary", "jill","steve"))

tibble_df$age[tibble_df$name == "mary"] <- 47

Warning message:
Unknown column 'age' 

이것을 피하는 더 좋은 방법이 있지만, 먼저 NAs 벡터를 생성 하면 작업 이 수행된다는 것을 알았 습니다.

tibble_df$age <- NA

tibble_df$age[tibble_df$name == "mary"] <- 47


답변

“dplyr”패키지를 사용할 때이 문제에 직면했습니다.
“dplyr”라이브러리에서 “group_by”기능을 사용한 후이 문제가 발생하는 경우 :

변수를 그룹 해제하면 알 수없는 열 경고 문제가 해결됩니다. 때로는 문제가 해결 될 때까지 그룹 해제를 여러 번 반복해야했습니다.


답변

클래스를 변환하면 data.frame문제가 해결되었습니다.

library(dplyr)
df <- data.frame(id = c(1,1:3), name = c("mary", "jo", "jill","steve"))
dfTbl <- df %>%
  group_by(id) %>%
  summarize (n = n())
class(dfTbl) # [1] "tbl_df"     "tbl"        "data.frame"
dfTbl = as.data.frame(dfTbl)
class(dfTbl) # [1] "data.frame"

@adts에서 부분 스크립트를 차용


답변

티블과 랩 기능을 함께 처리 할 때이 문제가 발생했습니다. tibble은 데이터 프레임 안에 물건을 목록으로 저장하는 것처럼 보였습니다.

랩 함수의 결과를 tibble에 추가하기 전에 unlist를 사용하여 해결했습니다.


답변

dyplyr 블록을 사용하여 생성 된 티블을 제외 하고는이 문제도 발생했습니다. 다음은 동일한 오류가 발생하는 방법을 보여주기 위해 sabre의 코드를 약간 수정 한 것입니다.

library(dplyr)

df <- data.frame(id = c(1,1:3), name = c("mary", "jo", "jill","steve"))

t <- df %>%
  group_by(id) %>%
  summarize (n = n())

t
str(t)


t$newvar[t$id==1] <- 0


답변

다음 열을 선택하고 싶다고 가정 해 봅시다.

best.columns = 'id'

나에게 다음과 같은 경고가 나왔다.

df%>% select_(one_of(best.columns))

비록 내가 아는 한 dplyr, 이것은 예상대로 작동했지만 이것은 동일해야합니다.

df%>% select_(.dots = best.columns)