1

我正在返回一些旧代码。我确信它在过去有效。自从我上次使用它以来,我已经升级dplyr到 1.0.0 版本。不幸的是,在编译时devtools::install_version("dplyr", version='0.8.5")给了我一个错误,所以我无法执行回归测试。

我正在尝试从包中创建一个整洁的类版本。该类本质上是任意大小的(大)二维矩阵。它可能有几(几万)行,并且列名是相关的,并且(如下面的玩具数据)可能很尴尬。对象的属性中也有有用的信息。因此,我采取了有点复杂的方法。它必须是完全通用的。mcmcrunjags mcmcmcmc

* 玩具数据 *

# load("./data/oCRMPosteriorShort.rda")
# x <- head(oCRMPosteriorShort$mcmc[[1]])
# dput(x)
x <- structure(c(7.27091686833247, 5.72764789439587, 5.72103479848012, 
            7.43825337823404, 8.59970106873194, 8.03081445451, 9.16248677241767, 
            3.09793571064081, 4.66492638321819, 3.19480526258532, 5.1159808007229, 
            6.08361682213139, 5.05973067601884, 4.14556598358942, 0.95900563867179, 
            0.88584483221691, 0.950304627720881, 1.13467524314569, 1.44963882689823, 
            1.19907577185321, 1.15968445234753), .Dim = c(7L, 3L), .Dimnames = list(
              c("5001", "5003", "5005", "5007", "5009", "5011", "5013"), 
              c("alpha[1]", "alpha[2]", "beta")), mcpar = c(5001, 5013, 
                                                            2), class = "mcmc")

* 第 1 阶段:有效的代码:*

a <- attributes(x)
colNames <- a$dimnames[[2]]
#Get the sample IDs (from the attributes of x) and add the chain index 
base <- tibble::enframe(a$dimnames[[1]], value="Sample") %>%
          tibble::add_column(Chain=1, .before=1) %>%
          dplyr::select(-.data$name)
# Create a list of tibbles, defining each as the contents of base plus the contents of the ith column of x, 
# plus the name of the ith column in Temp.
t <- lapply(1:length(colNames), function(i) d <- cbind(base) %>% tibble(Temp=colNames[i], Value=x[,colNames[i]]))

在这一点上,我有一个小标题列表。每个 tibble 包含命名的列Chain1在这种情况下,每个 tibble 中每个观察的值都是 ),Sample(值取自dimnames属性的第一个维度xTemp(值betaalpha[1]并且alpha[2]在列表的元素 3、1 和 2 中) ) 和Value( mcmc单元格 [ Sample, Temp] 中对象的值。

* 第 2 阶段:问题出在这里... *

row_bind将列表放入一个包含(一些)我需要的信息的整洁的小标题中应该是一件简单的事情。但:

# row_bind the list of tibbles into a single object
rv <- dplyr::bind_rows(t)
# Error: `vec_ptype2.double.double()` is implemented at C level.
# This R function is purely indicative and should never be called.
# Run `rlang::last_error()` to see where the error occurred.

* 问题 *

我看不出我在这里做错了什么。(即使我做错了什么,我也希望得到更用户友好、更高级别的错误消息。)我在网络上的任何地方都找不到对这个错误的任何引用。

  1. 有谁知道发生了什么?
  2. 有人会使用dplyrv0.8.x 运行代码并报告他们看到的内容吗?

我很感激你的想法。

* 更新 *

看起来问题似乎已通过重新启动解决,但现在又回来了。即使这些小问题导致错误,在线文档中的一个相关示例也有效:

one <- starwars[1:4, ]
two <- starwars[9:12, ]
bind_rows(list(one, two))

运行没有问题。

语境:

> # Context
> R.Version()$version.string
[1] "R version 3.6.3 (2020-02-29)"
> packageVersion("dplyr")
[1] ‘1.0.0’
> Sys.info()["version"]
                                                                                            version 
"Darwin Kernel Version 18.7.0: Mon Apr 27 20:09:39 PDT 2020; root:xnu-4903.278.35~1/RELEASE_X86_64" 
4

0 回答 0