我正在返回一些旧代码。我确信它在过去有效。自从我上次使用它以来,我已经升级dplyr
到 1.0.0 版本。不幸的是,在编译时devtools::install_version("dplyr", version='0.8.5")
给了我一个错误,所以我无法执行回归测试。
我正在尝试从包中创建一个整洁的类版本。该类本质上是任意大小的(大)二维矩阵。它可能有几(几万)行,并且列名是相关的,并且(如下面的玩具数据)可能很尴尬。对象的属性中也有有用的信息。因此,我采取了有点复杂的方法。它必须是完全通用的。mcmc
runjags
mcmc
mcmc
* 玩具数据 *
# 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 包含命名的列Chain
(1
在这种情况下,每个 tibble 中每个观察的值都是 ),Sample
(值取自dimnames
属性的第一个维度x
,Temp
(值beta
,alpha[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.
* 问题 *
我看不出我在这里做错了什么。(即使我做错了什么,我也希望得到更用户友好、更高级别的错误消息。)我在网络上的任何地方都找不到对这个错误的任何引用。
- 有谁知道发生了什么?
- 有人会使用
dplyr
v0.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"