我刚写了一个块来找出互相关值中最大的峰值,但是当我运行循环代码时根本就没有输出。所以我只想问一下我的逻辑在编写循环时是否有问题,或者我可以尝试修改订单。
我想要的输出逻辑:
for (i in 1:n) {
if (y[i]=max(y[i]) & x[i]>0) {
p=x[i]
}
else if (y[i]=min(y[i] & x[i]<0) {
p=-x[i]
}
}
其他的是省略因为他们什么也没输入。请注意,x[i]
和y[i]
位于同一数据框中。
下面是我的代码(我发现我的d1输入犯了一个大错误):
设置数据框(我刚上传了ccf结果的输出):
lag<-c(-26:26)
acf<-c(0.047407605,-0.082137676,0.034121452,0.039142063,-0.043329145,-0.020623160,0.039402880,0.015249114,-0.035820024,-0.015923312,0.037330662,0.006072103,-0.031716579,0.011451683,-0.010197626,-0.002019121,0.053034576,-0.046888611,-0.014243574,0.062941934,-0.008920250,-0.069821500,0.055471320,-0.047680416,0.041748427,-0.397052734,0.753759104,-0.354801338,0.040349059,-0.082996566,0.093101698,-0.120570604,0.052011432,-0.007482147,0.045102472,-0.064384729,0.048119729,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
d1<-data.frame(lag,acf)
for(i in 1:length(d1[,2])) {
if (d1[i,2] == max(d1[,2])) {
if(d1[i,1]>0){
cat(d[i,1])
cat("CHIE lags CHIQ \n")
p=d1[i,1]
} else {
if (d1[i,2] == min(d1[,2]) & d1[i,1]<0) {
d=-d1[i,2]
cat(d)
cat("CHIE leads CHIQ \n")
p=d
}
}
}
对不起,我确实忘记了C中的一堆基本循环知识,并想把它带回到我的脑海。非常感谢您的帮助!
P.S我测试了一些基本的数据框,它确实有效,但不幸的是它不适用于我自己的数据集(没有错误,但没有输出)。所以我想如果ccf函数的输出也有问题。
答案 0 :(得分:2)
您的代码中没有输出,因为您缺少'}'。如果没有错误消息,通常意味着您没有关闭循环。运行以下内容,您将看到它的工作原理。
d1 <- data.frame(runif(100), runif(100))
colnames(d1) <- c('x','y')
for(i in 1:length(d1[,2])) {
if (d1[i,2] == max(d1[,2])) {
if(d1[i,1]>0){
cat(d1[i,1])
cat("CHIE lags CHIQ \n")
p=d1[i,1]
} else {
if (d1[i,2] == min(d1[,2]) & d1[i,1]<0) {
d=-d1[i,2]
cat(d1)
cat("CHIE leads CHIQ \n")
p=d1
}
}
}
}
然而,有更优雅的方法可以找到每列中最大值的索引。见?which.max
tester <- apply(d1, FUN=which.max, 2)
现在您可以使用tester [1]和tester [2]的值并替换循环。