我一直遇到"未知列"的持续性多个警告,无论是什么类型的命令(例如str(x)安装更新程序包),都不确定如何调试或修复它。
"未知列"警告明显与我重命名的tbl_df中的变量有关,但警告出现在所有种类的命令中,似乎与tbl_df无关(例如在一个简单的字符向量x上执行安装更新文件包,str(x)等命令)。
我一直遇到"未知列"的持续性多个警告,无论是什么类型的命令(例如str(x)安装更新程序包),都不确定如何调试或修复它。
"未知列"警告明显与我重命名的tbl_df中的变量有关,但警告出现在所有种类的命令中,似乎与tbl_df无关(例如在一个简单的字符向量x上执行安装更新文件包,str(x)等命令)。
Disable the code diagnostics for all files in Preferences/Code/Diagnostics
Disable all diagnostics for a specific file:
Add at the beginning of the opened file(s):
# !diagnostics off
Then save the files and the warnings should stop appearing.
Disable the diagnostics for the variables that cause the warning
Add at the beginning of the opened file(s):
# !diagnostics suppress=<comma-separated list of variables>
Then save the files and the warnings should stop appearing.
我一直遇到同样的问题,虽然我不知道为什么会发生,但我已经能够确定它发生的时间,并防止其发生。
问题似乎出在在基础R数据框或tibble数据框中添加新的索引派生列时。以这个例子为例,您向基础 R 数据框添加一个新列(age
):
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
tbl_df
似乎是产生这些警告的必要条件,但我不确定它是否足够。也就是说,我认为当 tbl_df
与其他tidyverse包中的函数一起使用(例如tidyr,dplyr)时,可能会出现此警告。为这样一个关键的套件付出小代价是值得的,但仍然很奇怪/烦人。 - sabreNA
组成的向量对我很有用!(RStudio 版本 1.1.456,R 版本 3.5.1) - petziNA
,那么后面填入的日期将会被转换成数字类型。 - Jiagengas.Date(NA_character_)
返回一个类为 Date
的 NA
。 - Stibu我发现取消变量的分组可以解决未知列警告问题。有时我不得不多次迭代取消分组,直到问题解决为止。
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和lapply函数时,我曾遇到过这个问题。看起来tibble将东西保存为数据框中的列表。
在将lapply函数的结果添加到tibble之前,我通过使用unlist解决了这个问题。
sf
包加载geopackage格式的空间向量时,遇到了相同的问题。对我有用的是使用as_tibble=FALSE
。文件被加载为sp
对象,但一切仍然正常工作。正如@sabre所提到的,试图将对象强制转换为tibble
似乎会在尝试索引不再存在的列时出现问题。在@stok的答案基础上(https://dev59.com/WVkT5IYBdhLWcg3wG8D4#47848259),他在使用group_by(也会将您的data.frame转换为tibble)时发现了这个问题,并以同样的方式解决了它。
对我来说,问题最终是由于使用“slice()”引起的。Slice()将我的data.frame转换为tibble,导致了这个错误。
检查您的data.frame的类,并在函数将其转换为tibble时重新将其转换为data.frame,可以解决此问题。
我也遇到了这个问题,但是是通过使用dyplyr块创建的tibble。这里稍微修改了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
当我使用dplyr :: rename
重命名使用readr
包读取的列时,会出现以下警告:
列的旧名称未在spec
属性中重命名。因此,删除spec
属性可以消除警告。另外,删除“spec_tbl_df”类似乎是个好主意。
attr(dat, "spec") <- NULL
class(dat) <- setdiff(class(dat), "spec_tbl_df")
假设我想选择以下列:
best.columns = 'id'
对我来说,以下内容会出现警告:
df%>% select_(one_of(best.columns))
虽然这个代码可以正常工作,但据我所知,使用 dplyr
库应该是相同的。
df%>% select_(.dots = best.columns)