鉴于新的会议, 执行函数文档中提供的小型 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))
结果:
错误:( list)对象无法强制输入'double'
请注意,库(。)语句的顺序不很重要。
问题
我需要更大的分析中的 dplyr 和 ggparcoord(。),但这个最小的例子反映了我面临的问题。
版本
更新
将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))
答案 0 :(得分: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 包作者应该做的任何事情来解决它。你必须要知道,使用非{Hadley书面包的tbl_df
可能会破坏事物。
如您所述,删除额外的类属性可以解决问题,因为它使用普通的[
方法返回R。
答案 1 :(得分:0)
解决方法:强制您将ggparcoord
的数据强制转换为as.data.table(...)
或as.data.table(... , keep.rownames=TRUE)
,除非您想丢失所有的rownames。
原因:根据@joran的调查,加载dplyr
时,tbl_df
会覆盖[
,因此drop = FALSE。
解决方案:在GGally上提交拉取请求。