首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dplyr掩码GGally并破坏ggparcoord

dplyr掩码GGally并破坏ggparcoord
EN

Stack Overflow用户
提问于 2016-02-10 22:28:03
回答 1查看 615关注 0票数 9

给定一个新的会话,执行一个小的ggparcoord(.)函数文档中提供的示例

代码语言:javascript
复制
library(GGally)

data(diamonds, package="ggplot2")
diamonds.samp <- diamonds[sample(1:dim(diamonds)[1], 100), ]
ggparcoord(data = diamonds.samp, columns = c(1, 5:10))

结果分为以下情节:

同样,从新会话开始,并使用加载的dplyr执行相同的脚本。

代码语言:javascript
复制
library(GGally)
library(dplyr)

data(diamonds, package="ggplot2")
diamonds.samp <- diamonds[sample(1:dim(diamonds)[1], 100), ]
ggparcoord(data = diamonds.samp, columns = c(1, 5:10))

在以下方面的成果:

错误:(列表)对象不能被强制键入'double‘

请注意,库的顺序(.)语句无关。

问题

  1. 代码样本有什么问题吗?
  2. 有什么方法可以克服这个问题(某些命名空间函数)?
  3. 还是这是个窃听器?

我需要dplyr和ggparcoord(.)在一个更大的分析,但这个最小的例子反映了我面临的问题。

版本

  • R@ 3.2.3
  • dplyr @ 0.4.3
  • GGally @ 1.0.1
  • ggplot @ 2.0.0

更新

总结一下约兰给出的好答案:

答案

  1. 代码示例实际上错误为ggparcoord(.)期望一个data.frame,而不是钻石数据集给出的tbl_df (如果加载了dplyr )。
  2. 这个问题通过强迫tbl_df到data.frame来解决。
  3. 不不是虫子。

工作代码示例:

代码语言:javascript
复制
library(GGally)
library(dplyr)

data(diamonds, package="ggplot2")
diamonds.samp <- diamonds[sample(1:dim(diamonds)[1], 100), ]
ggparcoord(data = as.data.frame(diamonds.samp), columns = c(1, 5:10))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-11 01:50:06

把我的评论转化成一个答案。

这里的GGally包做了一个合理的假设,即在数据帧上使用[应该像往常一样,而且总是这样。然而,这一切都在哈德利节,diamonds数据集既是一个tbl_df,也是一个data.frame

加载dplyr时,[的行为将被覆盖,因此drop = FALSE始终是tbl_df的默认行为。因此,在GGally中有一个位置,期望data[,"cut"]返回一个向量,但它返回另一个数据帧。

...specifically,在尝试执行以下操作时,将在示例中引发错误:

代码语言:javascript
复制
data[, fact.var] <- as.numeric(data[, fact.var]). 

由于data[,fact.var]仍然是一个数据框架,因此也是一个列表,所以as.numeric无法工作。

至于你的结论,这不是一个错误,我会say....maybe。可能吧。至少,GGally包的作者应该做些什么来解决这个问题。您只需要意识到,使用tbl_df与非Hadley编写的包一起使用可能会破坏一些东西。

正如您已经注意到的,删除额外的类属性解决了问题,因为它将R返回到使用普通的[方法。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35327250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档