当使用upsetR时,如何解决“ $$-。data.frame`(`* tmp *`,“ x”,值= 1L)中的错误:替换项有1行,数据项有0”?

时间:2019-05-08 14:26:47

标签: r upsetr

下面是模拟数据,它将作为upset()函数的输入

nobs <- 4000
pb <- round(runif(n=1, min=0.1, max=0.8),1)
August <- rbinom(n=nobs, size=1, prob=pb)
pb <- round(runif(n=1, min=0.1, max=0.8),1)
September <- rbinom(n=nobs, size=1, prob=pb)
pb <- round(runif(n=1, min=0.1, max=0.8),1)
October <- rbinom(n=nobs, size=1, prob=pb)
pb <- round(runif(n=1, min=0.1, max=0.8),1)
November <- rbinom(n=nobs, size=1, prob=pb)
pb <- round(runif(n=1, min=0.1, max=0.8),1)
December <- rbinom(n=nobs, size=1, prob=pb)

#generate random id
myFun <- function(n = nobs) {
  a <- do.call(paste0, replicate(5, sample(LETTERS, n, TRUE), FALSE))
  paste0(a, sprintf("%04d", sample(9999, n, TRUE)), sample(LETTERS, n, TRUE))
}

AumPre <- round(runif(n=nobs, min=100000, max=250000))
AumAft <- round(runif(n=nobs, min=100000, max=250000))
AumIncrease <- as.integer(AumAft > AumPre)
ncust <- myFun()
df <- data.frame(ncust
             , August
             , September
             , October
             , November
             , December
             , AumPre
             , AumAft
             , AumIncrease)
upset(df, boxplot.summary = c("AumAft"))

调用upset()时,我不断收到以下错误。

Error in `$<-.data.frame`(`*tmp*`, "x", value = 1L) : 
  replacement has 1 row, data has 0

似乎其他人也遇到了类似的问题,如此处报道 https://github.com/hms-dbmi/UpSetR/issues/93

希望对此有一种解决方法。我喜欢可视化,但使用自己的数据集时无法实现。

谢谢

1 个答案:

答案 0 :(得分:1)

我认为程序包可能会查找第一个和最后一个二进制列,并将它们之间的所有列都视为集合的一部分。重新排列列时,问题就消失了。


library(tidyverse)

df <- df %>% 
  select(ncust, AumPre, AumAft, August, September, October, November, December, AumIncrease)

upset(df)
upset(df, boxplot.summary = c("AumAft"))