Han*_*nes 9 r ggplot2 dplyr parallel-coordinates ggally
给定一个新的会话,执行函数文档中提供的小ggparcoord(.)示例
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执行相同的脚本
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'
需要注意的是顺序库()语句也没有关系.
问题
我需要更大的分析中的dplyr和ggparcoord(.),但这个最小的例子反映了我面临的问题.
版本
UPDATE
将Joran给出的优秀答案包括起来:
答案
工作代码示例:
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))
jor*_*ran 16
将我的评论转换为答案......
这里的GGally包是合理的假设,即[在数据框上使用应该按照它始终如一的方式运行.然而,这一切都在Hadley-verse中,diamonds数据集既是一个tbl_df也是一个data.frame.
当dplyr被加载,行为[被覆盖,使得drop = FALSE始终是一个默认的tbl_df.因此,在GGally中有一个地方data[,"cut"]可以返回一个向量,但它会返回另一个数据帧.
...具体而言,在尝试执行时,您的示例中会抛出错误:
data[, fact.var] <- as.numeric(data[, fact.var]). 
由于data[,fact.var]仍然是数据框,因此列表as.numeric不起作用.
至于你的结论,这不是一个错误,我会说....也许.大概.至少可能没有GGally包作者应该做的任何事情来解决它.你必须要知道,使用tbl_df非Hadley编写的软件包可能会破坏事情.
如您所述,删除额外的类属性可以解决问题,因为它使用普通[方法返回R.