gpt4 book ai didi

r - 沿数组中的 n 个维度之一选择

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

我在 R 中有一个数组,由如下函数创建:

A <- array(data=NA, dim=c(2,4,4), dimnames=list(c("x","y"),NULL,NULL))

我想沿一维进行选择,因此对于上面的示例,我将:

A["x",,]
dim(A["x",,]) #[1] 4 4

如果我事先不知道我的数组可能有多少个维度(除了我想要选择的指定维度之外),是否有一种方法可以概括?我想编写一个函数,它接受可能格式为上面 A 或以下格式的输入:

B <- c(1,2)
names(B) <- c("x", "y")

C <- matrix(1, 2, 2, dimnames=list(c("x","y"),NULL))

背景

一般背景是我正在研究 ODE 模型,因此对于 deSolve 的 ODE 函数,它必须采用具有我当前状态的单个命名向量。对于其他一些函数,例如计算相平面/方向场,拥有一个更高维的数组来应用微分方程会更实用,并且我想避免拥有同一函数的许多副本,只需使用不同的副本我要选择的维度后的逗号数量。

最佳答案

我花了很多时间来找出为 plyr 执行此操作的最快方法,而我能想到的最好方法是手动构建对 [:

的调用
index_array <- function(x, dim, value, drop = FALSE) { 
# Create list representing arguments supplied to [
# bquote() creates an object corresponding to a missing argument
indices <- rep(list(bquote()), length(dim(x)))
indices[[dim]] <- value

# Generate the call to [
call <- as.call(c(
list(as.name("["), quote(x)),
indices,
list(drop = drop)))
# Print it, just to make it easier to see what's going on
print(call)

# Finally, evaluate it
eval(call)
}

(您可以在 https://github.com/hadley/devtools/wiki/Computing-on-the-language 找到有关此技术的更多信息)

然后您可以按如下方式使用它:

A <- array(data=NA, dim=c(2,4,4), dimnames=list(c("x","y"),NULL,NULL))
index_array(A, 2, 2)
index_array(A, 2, 2, drop = TRUE)
index_array(A, 3, 2, drop = TRUE)

如果您想基于多个维度进行提取,它也可以以一种直接的方式进行概括,但您需要重新考虑函数的参数。

关于r - 沿数组中的 n 个维度之一选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14500707/

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