【问题标题】:tidyverse problems when loading tidyverse in .Rprofile在 .Rprofile 中加载 tidyverse 时出现 tidyverse 问题
【发布时间】:2019-01-28 15:04:03
【问题描述】:

我最近尝试使用 .Rprofile 文件。 在我的项目中,我总是使用 tidyverse 包,所以我想我会在项目的主目录中创建一个 .Rprofile 文件来加载库:

library(tidyverse)

当我打开项目时确实加载了库,但我没有像往常一样运行。

此代码给出错误:

tibble(a = 1:5) %>% filter(a > 4)

过滤器错误(., a > 4):找不到对象“a”

我假设我必须在 .Rprofile 中包含一些内容,但我找不到它是什么。

【问题讨论】:

  • 请检查加载的包,因为我无法重现该问题
  • 在 .Rprofile 中加载包几乎总是一个坏主意,因为这会将您的软件与您的特定配置联系起来。
  • 你需要在tidyverse之前加载默认包。使用您的解决方案,您之前加载了tidyverse,因此filter 函数(如果未指定)来自stats 包。即使非常难看,在.Rprofile 中的library(tidyverse) 之前插入invisible(lapply(.Options$defaultPackages, function(x) library(x, character.only=TRUE)))
  • 我还想强调@G.Grothendieck 所说的:不要在您的个人资料中加载包。这是一种非常糟糕的做法,并且会降低您的代码的可移植性。
  • 谢谢,您的解决方案运行良好。我还找到了options(defaultPackages=c(getOption("defaultPackages"), "tidyverse"))。但是,我会听取您的建议,而不是在 .Rprofile 中批量打包。

标签: r tidyverse


【解决方案1】:

您是否尝试过使用dplyr::filter? R中默认有一个过滤器功能,所以你需要指定它是dplyr的过滤器。试试tibble(a = 1:5) %>% dplyr::filter(a > 4)

【讨论】:

  • 这似乎工作,虽然我不明白为什么:这条线工作没有问题:tibble(a = 1:5) %>% filter_at(vars("a"), any_vars(. > 4)) 我的猜测是 tidyversestats 包之前加载,导致 R先找stats::filter
  • 那是因为filter_at 是 dplyr 的内部函数,所以它不会产生冲突。打开你的 RStudio 并加载 tidyverse,你会发现函数/包之间的冲突。我建议您在使用过滤器、选择等时使用library::,因为它们在多个包(stats、dplyr、data.table 等)中被屏蔽
猜你喜欢
  • 1970-01-01
  • 2018-04-21
  • 1970-01-01
  • 2021-10-31
  • 1970-01-01
  • 2019-06-27
  • 2018-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多