gpt4 book ai didi

r - 相当于原始向量的 substr

转载 作者:行者123 更新时间:2023-12-01 23:24:28 24 4
gpt4 key购买 nike

R 中的raw 向量是否有等效的substring

假设我有一个大的二进制原始向量 x,例如作为使用 readBin 读取文件的结果。现在我使用 grepRaw 找到我想要访问的原始向量中的某个片段的索引。玩具示例:

x <- charToRaw("foobar");
n <- 2;
m <- 5;

现在我想从位置 2 和位置 5 中提取“子字符串”。这样做的 native 方法是:

x[n:m]

但是,这对于大片段的扩展性很差,因为 R 首先创建一个大向量 n:m 然后迭代这个向量以从 x 中提取元素指标,一个接一个。是否有更原生的方法来提取 raw 向量的一部分,类似于字符向量的 substr ?我认为我不能使用 rawToChar,因为这些文件可能包含非文本二进制数据。

最佳答案

这是一个C实现

library(inline)
subraw <- cfunction(c(x="raw", i="integer", j="integer"), "
int n = INTEGER(j)[0] - INTEGER(i)[0] + 1;
SEXP result;
if (n < 0)
Rf_error(\"j < i - 1\");
result = Rf_allocVector(RAWSXP, n);
memcpy(RAW(result), RAW(x) + INTEGER(i)[0] - 1L, n);
return result;
")

关于缺少完整性检查的常见警告(例如,i、j 标量而不是 NA、i > 0;j <= length(x) 等)。在行动中

> xx = readBin("~/bin/R-devel/lib/libR.so", raw(), 6000000)
> length(xx)
[1] 5706046
> length(subraw(xx, 1L, length(xx)))
[1] 5706046
> system.time(subraw(xx, 1L, length(xx)))
user system elapsed
0.000 0.000 0.001

subraw(xx, 10L, 9L) 返回 raw(0)

关于r - 相当于原始向量的 substr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17100518/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com