错误'未定义列已选中' - R

时间:2017-04-10 15:28:15

标签: r chord circlize

在使用chordDiagram()包中的circlize函数时,我需要一些帮助,并返回错误消息。

我正在与渔业上岸工作。渔船在一个港口(本港PORT_DE)开始他们的旅行,并将他们的渔获物(在这种情况下为扇贝)放在另一个港口(着陆港PORT_LA)。我正在尝试使用circlize包绘制一个和弦图,以显示端口之间的着陆流量。我有161个唯一端口,端口名称存储为character字符串。

在调用chordDiagram()函数绘制和弦图之前,我将相关列存储在虚拟对象(m)中。

# Store relevant column
m <- data.frame(PORT_DE = VMS_by_trips$PORT_DE_Label, 
            PORT_LA = VMS_by_trips$PORT_LA_Label, 
            SCALLOP_W = VMS_by_trips$Trip_SCALLOP_W)

head(m)
# PORT_DE  PORT_LA SCALLOP_W
# 1  Arbroath Arbroath  2.147143
# 2  Eyemouth Aberdeen  8.791970
# 3    Buckie Aberdeen  2.025833
# 4  Montrose Aberdeen  8.268540
# 5  Aberdeen Aberdeen  1.358286
# 6 Peterhead Aberdeen  0.797500

然后我使用dcast()创建一个邻接矩阵并重命名行。

require(reshape2)
m <- as.matrix(dcast(m, PORT_DE ~ PORT_LA, value.var = "SCALLOP_W", fun.aggregate = sum))
dim(m) #adjecency matrix represents port pairs
#[1] 153 138

row.names(m) <- m[,1]
m <- m[,2:dim(m)[2]]
class(m) <- "numeric"

最后,我调用了剧情函数chordDiagram()

library(circlize) 
chordDiagram(m) 

不幸的是,这会导致错误消息。

Error in `[.data.frame`(df, c(1, 2, 5)) : undefined columns selected

如果我用数字替换行名和列名,则运行该函数,并返回正确的图。

row.names(m) <- 1:153
colnames(m) <- 1:137

有关如何使用实际端口名称运行该功能的任何想法?

我已尝试删除特殊字符,将" "空格替换为"_"下划线,保留较少数量的字符,仅保留少量端口对。不幸的是,同样的错误不断出现。任何帮助表示赞赏。

  

请注意,自发布此问题以来,我已设法创建了   需要可视化。这是另一个相关问题的链接,   其中还包括调整和弦的各种设置的代码   图。

     

Adjust highlight.sector() width and placement - Chord diagram (circlize package) in R

1 个答案:

答案 0 :(得分:0)

感谢@ZuguangGu,错误消息的原因是我的列名中的if(shape[0] instanceof Circle){ // do something } 。如果你先删除它们,那么和弦图就可以了。使用相同的表示法,请参阅下文。

NAs