[英]R - Multiple variables in for loop?
如何在考虑两个变量的 R 中创建for
循环?
就像是:
for(i in 1:10, j in 1:10) {
if vector[j] == vector2[i]
print(variable)
else print(NA) }
这应该给我 100 个输出,而不是使用
vector[i] == vector[i]
这将产生 10。
编辑:感谢您到目前为止的帮助。 这是我的实际数据:
for(i in 1:10) {
for(j in 1:10) {
if (i == j)
print(NA)
else if(st231_eq1_alg$Output[j] == st231_eq1_alg$Input[i])
print(st231_eq1_alg_f[i])
else if(st231_eq1_alg$Output[j] == st231_eq1_alg$Output[i])
print(st231_eq1_alg_inv_f[i])
else print(NA)
}
}
任何想法如何最好地表示这些输出? 再次感谢。
好像你在问一个嵌套的for循环
for (i in 1:10){
for(j in 1:10){
...
}
}
但我会建议采用不同的方法
Vectors <- expand.grid(vector1 = vector1,
vector2 = vector2)
Vectors$comparison <- with(Vectors, vector1 == vector2)
您可以使用outer
执行此操作并获得结果的10x10矩阵:
vector <- 1:10
vector2 <- sample(vector)
outer(vector,vector2,"==")
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
[2,] FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[3,] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
[4,] FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE
[5,] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[6,] FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[7,] FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
[8,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
[9,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
[10,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
您可以使用嵌套for循环执行此操作:
for (i in 1:10) {
for (j in 1:10) {
# Your logic in here
}
}
如果编写两个嵌套循环,则代码可以正常工作:
for(i in 1:10} {
for (j in 1:10) {
if vector[j] == vector2[i]
print(variable)
else
print(NA)
}
}
以下示例显示了更快地获得此结果的不同可能性:
set.seed(1234)
vector <- sample(20,10)
vector2 <- sample(20,10)
same <- vector[vector %in% vector2]
m <- matrix(NA,ncol=10,nrow=10)
for (i in 1:length(same)) m[vector==same[i], vector2==same[i]] <- same[i]
#> vector
# [1] 3 12 11 18 14 10 1 4 8 6
#> vector2
# [1] 14 11 6 16 5 13 17 4 3 12
#> m
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# [1,] NA NA NA NA NA NA NA NA 3 NA
# [2,] NA NA NA NA NA NA NA NA NA 12
# [3,] NA 11 NA NA NA NA NA NA NA NA
# [4,] NA NA NA NA NA NA NA NA NA NA
# [5,] 14 NA NA NA NA NA NA NA NA NA
# [6,] NA NA NA NA NA NA NA NA NA NA
# [7,] NA NA NA NA NA NA NA NA NA NA
# [8,] NA NA NA NA NA NA NA 4 NA NA
# [9,] NA NA NA NA NA NA NA NA NA NA
#[10,] NA NA 6 NA NA NA NA NA NA NA
#> same
#[1] 3 12 11 14 4 6
这里的优点是你只有一个小循环只运行在两个向量中相同的条目(在这种情况下是六个数字),而不是在矩阵的整个100个条目上运行的嵌套循环。
如果要按顺序打印此矩阵的条目,就像在嵌套循环中一样,可以键入:
print(c(m))
至于与编辑相关的更改,我认为这应该有效:
same1 <- st231_eq1_alg$Output[st231_eq1_alg$Output %in% st231_eq1_alg$Input]
idx2 <- which(duplicated(st231_eq1_alg$Output))
same2 <- st231_eq1_alg$Output[idx2]
m <- matrix(NA, ncol = 10, nrow = 10)
for(i in 1:length(same1)) m[st231_eq1_alg$Output==same1[i], st231_eq1_alg$Input==same1[i]] <- same1[i]
for(i in 1:length(same2)) m[st231_eq1_alg$Output==same2[i], st231_eq1_alg$Output==same2[i]] <- st231_eq1_alg_inv_f[idx2[i]]
print(c(m))
我意识到当 i 和 j 相等时,上述解决方案有效。 对于 i 和 j 不相等的情况,我使用下面的代码:
a <- 5
for(i in 4:6){
for(j in a:7){
print(i*j)
a <- a+1
break
}
}
结果是 20,30,42
如果您仍想坚持使用 For 循环并拥有多个变量,我找到了一个相当简单的解决方案。
您只需要使用循环根据索引调用变量,而不是直接调用变量本身。 这些向量需要具有相同的长度。
所以循环看起来像这样:
for (h in 1:length(Vector1)) {
i <- Vector1[h]
j <- Vector2[h]
k <- Vector3[h] ....etc
希望有帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.