首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用while循环和if语句的r迭代

使用while循环和if语句的r迭代
EN

Stack Overflow用户
提问于 2022-02-17 10:42:26
回答 1查看 73关注 0票数 1

我对R还是新手,我有以下问题:我需要解决一个数值优化问题,其中我重新计算了一个劳动投入单位(V20),这样总体生产率差异就会增加。我必须迭代这个过程,直到它收敛为止。为此,每一行的生产率差异(Diff20)在优化后必须相等。

我的方法是计算最大和最小生产率差异( Diff_max,Diff_min),并将一个单位的劳动输入(V20)从生产率差异最高的行(这意味着随着某一输出水平需要更多的劳动力投入而降低)转移到生产率差异最低的行( Diff_min )(这意味着生产力的提高,因为在一定的输出水平上需要更少的劳动力投入)。

我尝试将with循环与该行的if条件组合为Diff_max或Diff_min。

不幸的是,这根本不起作用,所以我甚至不能提供一个propper错误消息。

你们中有人知道如何解决/解决这个问题吗?如果你能帮我,那就太好了!事先非常感谢!

代码语言:javascript
复制
df <- data.frame("PF"=c("PF1","PF2","PF3","PF4","PF5"),"V19"=c(2.6,5.9,0.5,0.1,3.0),"V20"=c(2.1,7.2,0.3,0.2,2.3), "F19"=c(26,80,10,7,24), "F20"=c(28,90,3,5,13), "A19"=c(4,320,5,0,80), "A20"=c(2.7,458,0,0,45), "B19"=c(1,6,0,0,5), "B20"=c(2,5,0,0,3))


df$num19 <- df$V19*220
df$denom19 <- (df$F19+df$A19+df$B19)
df$num20 <- df$V20*220
df$denom20 <- (df$F20+df$A20+df$B20)


df$rat19 <- df$num19/df$denom19
df$rat20 <- df$num20/df$denom20
df$Diff20 <- df$rat20 - df$rat19
df$Diff_mean <- mean(df$Diff20)
df$Diff_max <- max(df$Diff20)
df$Diff_min <- min(df$Diff20)

while (df$Diff_max> df$Diff_mean) {
  if (df$Diff20 == df$Diff_max) {
    df$V20 <- df$V20+0.1
  }
  if (df$Diff20 == df$Diff_min) {
    df$V20 <- df$V20-0.1
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-18 10:14:13

正如JKupzig所指出的,循环中没有更新条件。

运行代码时,我注意到了另外两件事:

  1. 通过增加最大值的命名器,而对于最小值则不收敛。
  2. 在0.1的网格大小看起来太大,不能收敛,我使它变小,所以最小的工作示例收敛。

代码语言:javascript
复制
    df <- data.frame("PF"=c("PF1","PF2","PF3","PF4","PF5"),
                 "V19"=c(2.6,5.9,0.5,0.1,3.0),
                 "V20"=c(2.1,7.2,0.3,0.2,2.3), 
                 "F19"=c(26,80,10,7,24), 
                 "F20"=c(28,90,3,5,13), 
                 "A19"=c(4,320,5,0,80), 
                 "A20"=c(2.7,458,0,0,45), 
                 "B19"=c(1,6,0,0,5), 
                 "B20"=c(2,5,0,0,3))

df$num19 <- df$V19*220
df$denom19 <- (df$F19+df$A19+df$B19)
df$num20 <- df$V20*220
df$denom20 <- (df$F20+df$A20+df$B20)

df$rat19 <- df$num19/df$denom19
df$rat20 <- df$num20/df$denom20
df$Diff20 <- df$rat20 - df$rat19
# df$Diff_mean <- mean(df$Diff20)
# df$Diff_max <- max(df$Diff20)
# df$Diff_min <- min(df$Diff20)

df

while(round(max(df$Diff20),3) > round(mean(df$Diff20),3)){
  df[df$Diff20 == max(df$Diff20), "V20"] <-  df[df$Diff20 == max(df$Diff20), "V20"] - 0.00001
  df[df$Diff20 == min(df$Diff20), "V20"] <-  df[df$Diff20 == min(df$Diff20), "V20"] + 0.00001
  df$num20 <- df$V20*220
  df$rat20 <- df$num20/df$denom20
  df$Diff20 <- df$rat20 - df$rat19
}

df
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71156586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档