R中的目标值和循环

时间:2013-10-07 09:44:41

标签: r loops for-loop

一些数据:

a <- function(a) {3*a+12*a^2}
dom1 <- seq(-1,4,0.1)
vec1 <- a(dom1)[1:10]

c <- function(c) {-5*c^2+2*c^3}
dom2 <- seq(-0.1,0.2,0.01)
vec2 <- c(dom2)[1:10]

d <- function(d) {2*d^2+5*d^3+12*d^4}
dom3 <- seq(0.1,0.5,0.01)
vec3 <- d(dom3)[1:10]

w <- function(w) {7*w-3*w^2}
dom4 <- seq(0.5,2.5,0.05)
vec4 <- w(dom4)[1:10]

现在假设我们在较大的数据集lm model上符合lm(y~a+c+d+w),而lm参数为c(-0.2,0.2,0.1,0.6)

fun.mean <- function(a,c,d,w) {-0.2*a+0.2*c+0.1*d+0.6*w}

我尝试了什么,但没有按预期工作:

这是循环从相关函数(&amp; domains)生成的向量

for(a in vec1) {
 for(c in vec2) {
  for(d in vec3) {
   for(w in vec4) {
    sol <- fun.mean(a,c,d,w)
    if (sol %% 1 > 0.40 & sol < 0.50) print(c(a,c,d,w))
  }}}}

所以我正在寻找的是找到c(a,c,d,w)的组合,它们等于0.5或理想地等于区间0.4-0.5

因此,将c(a,c,d,w)输出与函数fun.mean相乘不会得到所需的值(区间0.4-0.5)。我做错了什么?在给定“目标”值的情况下,找到c(a,c,d,w)值会有更好的方法吗?什么是for loop的替代方案,因为它非常慢。

1 个答案:

答案 0 :(得分:1)

您使用%% 1进行过滤,但在检查答案时不使用它。 以下代码返回9.00 -0.052000 0.02620000 2.7500 给出-0.15778。它符合您的标准(-0.15778 %% 1 = 0.85,其> 0.4 和-0.15&lt; 0.5)。

我猜你的标准是错的,你应该做任何一个

sol %% 1 > 0.4 and sol %% 1 < 0.5

sol > 0.4 and sol < 0.5.

在第一种情况下,也许你应该在fun.mean计算中添加%% 1。