我对R还是新手,我有以下问题:我需要解决一个数值优化问题,其中我重新计算了一个劳动投入单位(V20),这样总体生产率差异就会增加。我必须迭代这个过程,直到它收敛为止。为此,每一行的生产率差异(Diff20)在优化后必须相等。
我的方法是计算最大和最小生产率差异( Diff_max,Diff_min),并将一个单位的劳动输入(V20)从生产率差异最高的行(这意味着随着某一输出水平需要更多的劳动力投入而降低)转移到生产率差异最低的行( Diff_min )(这意味着生产力的提高,因为在一定的输出水平上需要更少的劳动力投入)。
我尝试将with循环与该行的if条件组合为Diff_max或Diff_min。
不幸的是,这根本不起作用,所以我甚至不能提供一个propper错误消息。
你们中有人知道如何解决/解决这个问题吗?如果你能帮我,那就太好了!事先非常感谢!
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
}
}发布于 2022-02-18 10:14:13
正如JKupzig所指出的,循环中没有更新条件。
运行代码时,我注意到了另外两件事:
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
}
dfhttps://stackoverflow.com/questions/71156586
复制相似问题