Ваш код работает, если вы пишете два вложенных цикла:
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))
ах просто спасибо! :) – Charlie