意外的" {"尝试使用if语句的for循环时出错

时间:2014-07-22 16:21:18

标签: r

我试图获得连续每个可能三元组的外部值的平均值,总共有15个值。我试过这个并得到了错误。

for (i in 1:12){
  if (!is.na(data[1,i] & data[1,i+1] & data[1,i+2])){
    a[i] <- apply(data[1,i],data[1,i+2],1,mean,na.rm=T)
  }
}

我到处寻找但找不到解决方案。我在这做错了什么?感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

这是一个在处理NA时执行您想要执行的操作的函数。它需要一行数据。

outer.triplet.mean = function(x){
  a = integer(length(x)-2)
  for (i in 1:length(x)-2){
    a[i] = ifelse(!any(is.na(c(x[i], x[i+1], x[i+2]))), mean(c(x[i], x[i+2])), NA)}
  return(a)
}

> outer.triplet.mean(1:10)
  2 3 4 5 6 7 8 9
> outer.triplet.mean(c(1:5, NA, 5, NA, 10, NA, 1:5))
  2  3  4 NA NA NA NA NA NA NA  2  3  4 

如果你想在所有行上运行它。

sapply(data, outer.triplet.mean)

答案 1 :(得分:-1)

也许你也可以尝试:

 outer.triplet.mean1 <- function(x,...) {
 indx <- 1:3+ rep(0:(length(x)-3),each=3)
 m1 <- matrix(x[indx], ncol=3, byrow=T)
 rowMeans(m1,...)
  }

 outer.triplet.mean1(1:10)
 #[1] 2 3 4 5 6 7 8 9

 outer.triplet.mean1(c(1:5,NA, 5, NA, 10, NA, 1:5))
 # [1]  2  3  4 NA NA NA NA NA NA NA  2  3  4

 outer.triplet.mean1(c(1:5,NA, 5, NA, 10, NA, 1:5),na.rm=T)
 # [1]  2.0  3.0  4.0  4.5  5.0  5.0  7.5 10.0  5.5  1.5  2.0  3.0  4.0

使用&gt; 1行

 apply(rbind(1:10,1:10),1, outer.triplet.mean1)