我认为这比现在容易,但我正在学习用R编码,所以循环肯定不是我的强项。
我在这里尝试做的是采取一系列具有MISO共同主题的功能。正如你在第一批代码中看到的那样,MISO是常见的,但是我想像在for循环中那样交换MISO for i然后在字符向量中循环几个不同的名称。让我们调用该字符向量ID,以便ID <- c("MISO","PJM","SERC")
在代码中的这一点上,all_Cities_MISO已经是我环境中的数据框架。我只想打破它并进行一些计算。
meanAvgHighMISO <- mean(all_Cities_MISO$Col21)
meanAvgLowMISO <- mean(all_Cities_MISO$Col20)
meanAvgMISO <- mean(cbind(meanAvgHighMISO,meanAvgLowMISO))
names(meanAvgMISO) <- ifelse(meanAvgMISO<65,"HDD","CDD")
MISO_Avg_DD <- ifelse(meanAvgMISO<65,(65-meanAvgMISO),(meanAvgMISO-65)) #average degree days for each period
MISO_op_mean <- apply(all_Cities_MISO[,1:19],2, mean)
所以我尝试了几次不同的时间,但不断收到Error: unexpected string constant in:
" meanAvgHigh"i""
我觉得在上面的代码中用一个简单的for循环用PJM替换MISO应该很简单,但没有运气。它必须与它不喜欢MISO作为一个角色。
这是我对for循环的尝试:
ID <- c("MISO","PJM","SERC")
for(i in ID){
meanAvgHigh"i" <- mean(all_Cities_"i"$Col21)
meanAvgLow"i" <- mean(all_Cities_"i"$Col20)
meanAvg"i" <- mean(cbind(meanAvgHigh"i",meanAvgLow"i"))
names(meanAvg"i") <- ifelse(meanAvg"i"<65,"HDD","CDD")
"i"_Avg_DD <- ifelse(meanAvg"i"<65,(65-meanAvg"i"),(meanAvg"i"-65)) #average degree days for each period
"i"_op_mean <- apply(all_Cities_"i"[,1:19],2, mean)
}
我尝试使用[i]而不是“i”,但这也不起作用。我知道MISO本身在我显示的第一个代码中不是一个字符,但我不确定R如何在循环中识别它...否则我只想在循环中进行简单的名称交换。 PJM或SERC等的MISO
非常感谢任何帮助,谢谢。
答案 0 :(得分:0)
虽然可以使用environment()
和assign()
方法执行此操作,但我会建议不要这样做。您应该使用嵌套列表来保存这些值。
但是,为了完整性,这就是我认为会这样做的方式(未经测试):
env <- environment()
ID <- c("MISO","PJM","SERC")
for(i in ID){
assign(paste0("meanAvgHigh", i), mean(env[[ paste0("all_Cities_", i) ]]$Col21))
assign(paste0("meanAvgLow", i), mean(env[[ paste0("all_Cities_", i) ]]$Col20))
assign(paste0("meanAvg", i), mean(cbind(env[[ paste0("meanAvgHigh", i) ]], env[[ paste0("meanAvgLow", i) ]])))
names(env[[ paste0("meanAvg", i) ]]) <- ifelse(env[[ paste0("meanAvg", i) ]] < 65,"HDD","CDD")
##### Note: The ifelse can probably be replaced by an abs
assign(paste0(i, "_Avg_DD"), ifelse( env[[ paste0("meanAvg", i) < 65,
(65 - env[[ paste0("meanAvg", i) ]]),
(env[[ paste0("meanAvg", i) ]] - 65)
)) #average degree days for each period
assign(paste0(i, "_op_mean"), apply(env[[ paste0("all_Cities_", i) ]][,1:19], 2, mean)
}
基本想法是使用assign
设置当前环境中的值,然后使用当前环境env
获取来通过索引。