修复多重警告"未知栏"

时间:2016-08-19 14:07:10

标签: r dplyr

我持续多次警告"未知栏"对于所有类型的命令(例如,str(x)在包上安装更新),并且不确定如何调试或修复它。

警告"未知栏"显然与我重命名的tbl_df中的变量有关,但警告出现在与tbl_df看似无关的所有类型的命令中(例如,在包上安装更新,str(x),其中x只是一个字符向量)。

9 个答案:

答案 0 :(得分:41)

更新:此问题已部分修复于此commit的RStudio v1.1.103或更高版本@kevin-ushey。它仍然出现(尽管频率较低)。

这是RStudio中的诊断工具的问题(该工具显示代码中的警告和可能的错误)。

https://support.rstudio.com/hc/en-us/community/posts/115001180488-Diagnostics-and-tibble-warning

作为一种解决方法,您可以在打开的文件的开头添加:

# !diagnostics off

然后保存文件,警告应该停止显示。

您也可以在“首选项/代码/诊断”中禁用诊断。

我认为警告出现是因为RStudio中的诊断工具解析源代码以检测错误,当它执行诊断检查时,它会访问您的tibble中未初始化的列,给出我们看到的警告。警告不会出现,因为您运行不相关的东西,它们在执行RStudio诊断时出现(当文件被保存,然后被修改,当您运行某些东西时......)。

答案 1 :(得分:37)

我遇到了同样的问题,虽然我不知道为什么它会发生,但是当发生时,我已经能够确定,从而防止它发生了。

问题似乎是在基本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

无需返回警告即可。但是当使用tibble进行同样的操作时,它会发出警告(因此,我认为会导致奇怪的,看似无端的多重警告问题):

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' 

肯定有更好的方法可以避免这种情况,但我发现首先创建一个NA的向量可以完成这项工作:

tibble_df$age <- NA

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

答案 2 :(得分:16)

使用&#34; dplyr&#34;时我遇到过这个问题包。
对于那些在使用&#34; group_by&#34;之后遇到此问题的人功能在&#34; dplyr&#34;库:

我发现取消组合变量可以解决未知列警告问题。有时我不得不多次迭代解组,直到问题得到解决。

答案 3 :(得分: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借用部分脚本

答案 4 :(得分:1)

我遇到了这个问题,除非通过使用dyplyr块创建的tibble。这是对saber代码的轻微修改,以显示我是如何遇到同样的错误。

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

答案 5 :(得分:0)

假设我想选择以下列

best.columns = 'id'

对我来说,以下是警告:

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

虽然这可以按预期工作,但据我所知dplyr,这应该是相同的。

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

答案 6 :(得分:0)

在一起处理tibble和lapply函数时遇到了这个问题。这个小问题似乎将事物保存为数据框内的列表。

在将lapply函数的结果添加到小标题之前,我通过使用unlist解决了该问题。

答案 7 :(得分:0)

在使用dplyr::rename包读取列之后,使用readr重命名列时,会收到这些警告。

该列的旧名称未在spec属性中重命名。因此,删除spec属性会使警告消失。同样,删除“ spec_tbl_df”类似乎是个好主意。

attr(dat, "spec") <- NULL
class(dat) <- setdiff(class(dat), "spec_tbl_df")

答案 8 :(得分:0)

我知道这是一个旧线程,但是我在使用包 sf 加载地理包格式的空间向量时遇到了同样的问题。使用 as_tibble=FALSE 对我有用。该文件已作为 sp 对象加载,但一切仍然正常。正如@sabre 所提到的,试图将一个对象强制放入 tibble 似乎在尝试索引一个不再存在的列时会出现问题。