Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R索引for循环中if-else语句下的函数并返回正确的值_R_For Loop_If Statement_Indexing - Fatal编程技术网

R索引for循环中if-else语句下的函数并返回正确的值

R索引for循环中if-else语句下的函数并返回正确的值,r,for-loop,if-statement,indexing,R,For Loop,If Statement,Indexing,我在正确索引函数以使其返回正确值方面遇到了问题。该函数仅在满足if条件且ifelse语句处于for循环时应用 我已经简化了我的函数和数据集,以使示例在这里重现-我编写它的方式目前不是很有效,但我只想确保索引工作正常,以便我可以尝试将其应用到更复杂的数据集,然后在以后进行优化 首先,我从一些数据开始: var1 <- seq(100, 500, 100) matrix1 <- matrix(1:12, ncol=2) matrix2 <- matrix(c(1,2,5,6,8,9

我在正确索引函数以使其返回正确值方面遇到了问题。该函数仅在满足
if
条件且
ifelse
语句处于
for
循环时应用

我已经简化了我的函数和数据集,以使示例在这里重现-我编写它的方式目前不是很有效,但我只想确保索引工作正常,以便我可以尝试将其应用到更复杂的数据集,然后在以后进行优化

首先,我从一些数据开始:

var1 <- seq(100, 500, 100)
matrix1 <- matrix(1:12, ncol=2)
matrix2 <- matrix(c(1,2,5,6,8,9,11,12,14,15,17,20), ncol=2)
matrix3 <- matrix(seq(1,34,3), ncol=2)
list1 <- list(matrix1, matrix2, matrix3)
如果我的
df1
通过了
length
测试,并且如果它不满足长度要求,我想给它一个
NA
值,那么我只尝试应用
func1

i=1
len=5
data3=1505
时;当
i=2
len=4
data3=1508
时;当
i=3
时,
len=0
so
data3=NA
。简而言之,我想从
for
循环返回的结果是
data3=c(15051508,NA)


但是,我现在无法得到这个结果,因为单独运行
I=1
I=2
I=3
都有效,我怀疑我有索引问题(我想可能是在
func1
中),但无法解决。谁能给我一些建议吗?

我稍微调整了循环语法:

data3 <- vector(length = 3, mode = "numeric")
for (i in 1:3) {
  vec1 <- var1
  vec2 <- diff(unlist(list1[[i]])[,1])
  df1 <- matrix()
  df1 <- cbind(vec1, vec2)
  len <- length(which(vec2<3))
  if (len>1) {
    v <- func1(df1)
    v <- v[!is.na(v)] #when i = 2, func1 returns a vector of length 2
    data3[[i]] <- v
  }
  else {
    data3[[i]] <- NA
  }
}

data3
[1] 1505 1508   NA

data3我想您的函数
func1
中有一个输入错误,应该是

func1 <- function(df1) {
  data1 <- df1[,1]
  data2 <- df1[,2]
  data3 <- vector()
  data3 <- sum(data1, data2)
  return(data3)
}


data3 <- c()
for (i in (1:3)) {
  vec1 <- var1
  vec2 <- diff(unlist(list1[[i]])[,1])
  df1 <- matrix()
  df1 <- cbind(vec1, vec2)
  len <- length(which(vec2<3))
  if (len>1) {
    r <- func1(df1)
  }
  else r <- NA
  data3 <- c(data3,r)
}

我实际上认为我的输出得到了
NA
NA
NA
?我认为我应该将
data3
的值“保存”到一个空向量中,以便将其导出到函数外部,这就是为什么我最初在
data3
中放入
[I]
索引的原因。@Jennifer查看我的更新,然后
data3
保存每次迭代的值
data3 <- vector(length = 3, mode = "numeric")
for (i in 1:3) {
  vec1 <- var1
  vec2 <- diff(unlist(list1[[i]])[,1])
  df1 <- matrix()
  df1 <- cbind(vec1, vec2)
  len <- length(which(vec2<3))
  if (len>1) {
    v <- func1(df1)
    v <- v[!is.na(v)] #when i = 2, func1 returns a vector of length 2
    data3[[i]] <- v
  }
  else {
    data3[[i]] <- NA
  }
}

data3
[1] 1505 1508   NA
func1 <- function(df1) {
  data1 <- df1[,1]
  data2 <- df1[,2]
  data3 <- vector()
  data3 <- sum(data1, data2)
  return(data3)
}


data3 <- c()
for (i in (1:3)) {
  vec1 <- var1
  vec2 <- diff(unlist(list1[[i]])[,1])
  df1 <- matrix()
  df1 <- cbind(vec1, vec2)
  len <- length(which(vec2<3))
  if (len>1) {
    r <- func1(df1)
  }
  else r <- NA
  data3 <- c(data3,r)
}
> data3
[1] 1505 1508   NA