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
sodata3=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