複数の警告「不明な列」の修正


170

すべての種類のコマンド(たとえば、パッケージに更新プログラムをインストールするためのstr(x))について、「不明な列」という複数の警告が常に表示されますが、これをデバッグまたは修正する方法がわかりません。

警告「不明な列」は、名前を変更したtbl_df内の変数に明らかに関連していますが、警告は、tbl_dfに関連していないように見えるすべての種類のコマンド(たとえば、パッケージへのアップデートのインストール、str(x)、xは単に文字ベクトル)。


11
質問が曖昧であることに気づきましたが、問題があるようです。ナンセンス(タイプミスなど)と入力して警告を受け取ることもできます。どういうわけか、それはIDE環境自体で永続的だと思いますか?
ssp3nc3r

1
正確なコマンドと得られる出力を投稿できますか?
konvas

3
はい、RStudioの最新バージョン。環境をクリーンアップして再起動しましたが、TBL_DFオブジェクトをロードすると発生し始めました。私はそれをas.data.frameに変換し、すべてを閉じてからデータフレームをリロードすることで問題を修正したようです。今後、2つのことを理解したいと思います。tbl_dfを使用して問題を回避する方法と、警告が環境に持続しているように見える理由です。
ssp3nc3r

1
同じエラーが発生します。であるFACEBOOK.1あなたのdata.framesの1の列とあなたがそれを呼び出すかdf$FACEBOOK.1、あなたのRスクリプト内のどこか?私の控えめな推測は、これはtibblev1.1で導入されたパッケージのエラーであるということです:blog.rstudio.org/2016/07/05/tibble-1-1。あなたが持っているtibble明示的にロードされましたか?
dpprdan 2016

5
これは私にも起こっています。複数のコンピューターでパターンを再現できますが、ライブラリ(Hmisc)などのコマンドやdplyrでデータフレームを作成した後、警告がランダムに表示されます。警告は、まだ作成していない列を参照しています-後でコードで作成します。RとRstudioを複数回再起動しましたが、コードをクリーンに実行しても役に立ちません。これは何ですか???
Nova

回答:


57

これは、RStudioの診断ツール(コードに警告や起こり得る間違いを表示するツール)の問題です。RStudio v1.1.103以降では、@ kevin-usheyによってこのコミットで部分的に修正されました。警告はまだ表示されますが、頻度は低くなりますが、修正は部分的です。この問題は、https://github.com/rstudio/rstudio/issues/7372の再現可能な例で報告されており、RStudio v1.4 プルリクエストで修正されています(リリース予定)。

いくつかの回避策が利用可能です、あなたが好むソリューションを選択してください:

  • Preferences / Code / Diagnosticsですべてのファイルのコード診断を無効にします

  • 特定のファイルのすべての診断を無効にします。

    開いているファイルの先頭に追加:

     # !diagnostics off

    次に、ファイルを保存すると、警告が表示されなくなります。

  • 警告の原因となる変数の診断を無効にします

    開いているファイルの先頭に追加:

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

    次に、ファイルを保存すると、警告が表示されなくなります。

警告が表示されるのは、RStudioの診断ツールがソースコードを解析してエラーを検出し、診断チェックを実行すると、初期化されていないティブルの列にアクセスして警告が表示されるためです。警告は、関係のないものを実行するため表示されません。RStudio診断が実行されたときに表示されます(ファイルが保存されてから変更されたとき、何かを実行したときに...)。


13
いい電話。これは、[ツール]のチェックを外しR「のショー診断」>グローバルオプション>コード>診断RStudio 150で私のために働いた
クリス・ホルブルック

8
RStudio 1.1.383とR 3.4.3を併用しても問題は解決しません。
MS Berends 2017

4
バージョン1.1.423にはまだ問題があります。「診断の表示」のチェックを外すとうまくいきます
Adrian

2
まだv1.1.456が存在します。はぁ。
地質学

3
シルはUbuntuのRStudio Server上にRStudio v1.1.643とR v3.5.1が存在します。
RFelber 2018

49

私は同じ問題に遭遇しており、なぜそれが発生するのはわかりませんが、発生したときにピン留めして発生を防ぐことができました。

問題は、インデックス付けから派生した新しい列をベースRデータフレームとティブルデータフレームのどちらに追加することにあるようです。この例では、新しい列(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

13
私の答えは明らかに全体の話ではありません。私はまだ(複数の)警告を得ている、と示唆した他のコメンターと、イライラする部分がある明白なことの恣意。tbl_df警告を出すにはA が必要なようですが、それで十分かどうかはわかりません。つまり、tbl_dfsが他のtidyverseパッケージ(例、tidyr、dplyr)の関数と組み合わせて使用​​されると、この警告が表示される可能性があると思います。パッケージのそのような重要なスイートに支払うための小さな価格ですが、それでも奇妙/迷惑です。
セイバー

のベクトルの作成はNA私のために働きました!(RStudioバージョン1.1.456、Rバージョン3.5.1)
petzi

列のタイプを指定したい場合があります(例:R日付)NA。を入力すると、後で入力された日付は数値タイプに変換されます。
Jiāgěng

1
@Jiāgěng as.Date(NA_character_)NAクラスで与えDateます。
Stibu

Tibblesは、data.framesよりも設計上の制限があります。設計上、一部のみを割り当てて列を開始することは想定されていません。ただし、これが保護機能であり、設計エラーではない場合は、ティブル割り当てでの初期の1回限りのエラーがはるかに望ましいでしょう。
vinnief

17

「dplyr」パッケージを使用すると、この問題に直面しました。
「dplyr」ライブラリの「group_by」関数を使用した後にこの問題に直面している人のために:

変数のグループ化を解除すると、不明な列の警告の問題が解決されることがわかりました。ときどき、問題が解決するまで、グループ解除を何度か繰り返す必要がありました。


4

クラスを変換し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に変換することにはマイナス面があるのではないかと思っていました。失うのは警告だけですか?
p130ter

1
RStudio 1.1.442はまだ機能していませんWarning message: Unknown or uninitialised column: 'bad_column'
andemexoax

3

tibble関数とlapply関数を一緒に処理するときにこの問題が発生しました。ティブルはデータフレーム内のリストとして物事を保存するように見えました。

ラップ機能の結果をティブルに追加する前にunlistを使用して解決しました。


1

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

1

次の列を選択したいとしましょう

best.columns = 'id'

私にとっては、次の警告が出されました:

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

これは期待どおりに機能しましたが、私の知る限りdplyr、これは同じはずです。

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

0

パッケージdplyr::renameを使用して読み取った後にを使用して列の名前を変更すると、これらの警告が表示されreadrます。

列の古い名前はspec属性で名前変更されません。したがって、spec属性を削除すると、警告が消えます。また、「spec_tbl_df」クラスを削除することは良い考えのようです。

attr(dat, "spec") <- NULL
class(dat) <- setdiff(class(dat), "spec_tbl_df")
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.