将向量的值绑定到R中的限制

问题描述 投票:1回答:1

假设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个人是有用的,但是如果个体的数量(和向量的长度)增加,例如,对于100循环,for循环会增加太多的计算时间。

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

X <- X + runif(100)

编辑:另外,想象X不是矢量而是矩阵。

r
1个回答
3
投票

我意识到这个问题比较陈旧,但我只是有同样的问题,所以我不想让它没有答案。

通过将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/

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

© www.soinside.com 2019 - 2024. All rights reserved.