使用本机管道 |> 在基本 R 中选择数据帧的多列有哪些好方法?(即,没有 tidyverse/dplyr 来减少外部依赖性)。
如果我们有数据框
dtf <- data.frame(a = 1:3, b = 4:6, c = 7:9)
Run Code Online (Sandbox Code Playgroud)
然后我们可以选择列 b 和 c
> dtf[c("b", "c")]
b c
1 4 7
2 5 8
3 6 9
Run Code Online (Sandbox Code Playgroud)
在 tidyverse 中使用本机管道执行此操作的一种优雅方法是
> dtf |> dplyr::select(b, c)
b c
1 4 7
2 5 8
3 6 9
Run Code Online (Sandbox Code Playgroud)
我对原生管道的最佳基础 R 尝试是
> dtf |> subset(select = c("b", "c"))
b c
1 4 7
2 5 8
3 6 9
Run Code Online (Sandbox Code Playgroud)
更简洁(但失败的尝试)是
> dtf …
Run Code Online (Sandbox Code Playgroud) 我正在记录一个内部的非导出函数。@export
即使文档中没有标签,roxygen2 也会创建一个 Rd 文件。roxygen2 为以下文档创建了一个 Rd 文件。我缺少什么?
#' Check validity of a
#' @param a A logical value
arg_check_a = function(a) {
if (!is.logical(a)) {
stop("a must be a logical value")
}
}
Run Code Online (Sandbox Code Playgroud) 有没有办法分配一个长度为 n 的 Rcpp List,其中 List 的每个元素都会填充一个 NumericMatrix,但是每个 NumericMatrix 的大小可以改变?
我有一个使用 std::list 和 push_back() 执行此操作的想法,但列表的大小可能非常大,我想避免从函数返回时创建列表的额外副本的开销。
下面的 R 代码给出了我希望做什么的想法:
myvec = function(n) {
x = vector("list", n)
for (i in seq_len(n)) {
nc = sample(1:3, 1)
nr = sample(1:3, 1)
x[[i]] = matrix(rbinom(nc * nr, size = 1, prob = 0.5),
nrow = nr, ncol = nc)
}
x
}
Run Code Online (Sandbox Code Playgroud)
这可能会导致类似的结果:
> myvec(2)
[[1]]
[,1]
[1,] 0
[2,] 1
[[2]]
[,1] [,2] [,3]
[1,] 0 1 0
[2,] 0 1 1 …
Run Code Online (Sandbox Code Playgroud)