gpt4 book ai didi

r - 将向量的值限制在 R 中的极限

转载 作者:行者123 更新时间:2023-12-02 21:11:40 25 4
gpt4 key购买 nike

假设 X 是长度为 100 的向量,其中 X 位置代表 100 个个体。所有代理均从位置 0 开始

X <- rep(0,100)

但它们嵌入在有边界的单词中。我有一个函数可以在给定时间随机改变所有代理的 X 位置。

Store <- X
X <- X + runif(100)

最终,一名特工将到达边界,此时,它会保持在限制范围内。最简单的方法是使用循环遍历向量并使用 if (伪代码)进行检查:

for (i in 1:length(X)) {
if (between the boundaries) {keep the new X[i]} else {assign X[i] the value in Store[i]}
}

这对于 100 个个体很有用,但是如果个体数量(以及向量的长度)增加,例如增加到 1000000,for 循环会增加太多计算时间。

有没有更简单的方法?我想也许我可以在以下期间跳过超过阈值的特定重新分配:

X <- X + runif(100)

编辑:另外,假设 X 不是向量而是矩阵。

最佳答案

我意识到这个问题相对较旧,但我也有同样的问题,所以我不想让它得不到答案。

将向量或矩阵的值限制在一定范围内,可以通过将 apply 语句与 min 和 max 函数结合起来以综合方式完成,如下例所示。

# Create sample vector
X <- c(1:100); print(X)

# Create sample matrix
M <- matrix(c(1:100),nrow=10); print(M)

# Set limits
minV <- 15; maxV <- 85;

# Limit vector
sapply(X, function(y) min(max(y,minV),maxV))

# Limit matrix
apply(M, c(1, 2), function(x) min(max(x,minV),maxV))

有关应用功能的更多信息,我将引用 R 文档和 R-Bloggers 上的这篇文章: https://www.r-bloggers.com/using-apply-sapply-lapply-in-r/

当我第一次遇到 apply 语句时,我发现这是一个很难理解的概念,但现在认为它是 R 最强大的功能之一。

关于r - 将向量的值限制在 R 中的极限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33081330/

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