Вы можете использовать outer
для получения элементов и либо [<-
или replace
для их вставки.
settlements <- matrix(data = 0, nrow = 40, ncol = 5)
myfun <- function(i, j){
3*i/sqrt(j)
}
settlements[seq(3, nrow(settlements), 3),] <-
outer(seq(3, nrow(settlements), 3), seq(ncol(settlements)), myfun)
# or
# settlements[seq(3, nrow(settlements), 3),] <-
# do.call(myfun,
# expand.grid(i = seq(3, nrow(settlements), 3),
# j = seq(ncol(settlements))))
# or replace(settlements, row(settlements) %% 3 == 0, outer_output)
# if you want to create a new matrix
settlements
# [,1] [,2] [,3] [,4] [,5]
# [1,] 0 0.000000 0.000000 0.0 0.000000
# [2,] 0 0.000000 0.000000 0.0 0.000000
# [3,] 9 6.363961 5.196152 4.5 4.024922
# [4,] 0 0.000000 0.000000 0.0 0.000000
# [5,] 0 0.000000 0.000000 0.0 0.000000
# [6,] 18 12.727922 10.392305 9.0 8.049845
# [7,] 0 0.000000 0.000000 0.0 0.000000
# [8,] 0 0.000000 0.000000 0.0 0.000000
# [9,] 27 19.091883 15.588457 13.5 12.074767
# [10,] 0 0.000000 0.000000 0.0 0.000000
# [11,] 0 0.000000 0.000000 0.0 0.000000
# [12,] 36 25.455844 20.784610 18.0 16.099689
# [13,] 0 0.000000 0.000000 0.0 0.000000
# [14,] 0 0.000000 0.000000 0.0 0.000000
# [15,] 45 31.819805 25.980762 22.5 20.124612
# [16,] 0 0.000000 0.000000 0.0 0.000000
# [17,] 0 0.000000 0.000000 0.0 0.000000
# [18,] 54 38.183766 31.176915 27.0 24.149534
# [19,] 0 0.000000 0.000000 0.0 0.000000
# [20,] 0 0.000000 0.000000 0.0 0.000000
# [21,] 63 44.547727 36.373067 31.5 28.174457
# [22,] 0 0.000000 0.000000 0.0 0.000000
# [23,] 0 0.000000 0.000000 0.0 0.000000
# [24,] 72 50.911688 41.569219 36.0 32.199379
# [25,] 0 0.000000 0.000000 0.0 0.000000
# [26,] 0 0.000000 0.000000 0.0 0.000000
# [27,] 81 57.275649 46.765372 40.5 36.224301
# [28,] 0 0.000000 0.000000 0.0 0.000000
# [29,] 0 0.000000 0.000000 0.0 0.000000
# [30,] 90 63.639610 51.961524 45.0 40.249224
# [31,] 0 0.000000 0.000000 0.0 0.000000
# [32,] 0 0.000000 0.000000 0.0 0.000000
# [33,] 99 70.003571 57.157677 49.5 44.274146
# [34,] 0 0.000000 0.000000 0.0 0.000000
# [35,] 0 0.000000 0.000000 0.0 0.000000
# [36,] 108 76.367532 62.353829 54.0 48.299068
# [37,] 0 0.000000 0.000000 0.0 0.000000
# [38,] 0 0.000000 0.000000 0.0 0.000000
# [39,] 117 82.731493 67.549981 58.5 52.323991
# [40,] 0 0.000000 0.000000 0.0 0.000000
Вы всегда можете просто написать операцию непосредственно в терминах row()
и col()
для создания новой матрицы
row(settlements)/3 + col(settlements)^2.5
# [,1] [,2] [,3] [,4] [,5]
# [1,] 1.333333 5.990188 15.92179 32.33333 56.23503
# [2,] 1.666667 6.323521 16.25512 32.66667 56.56837
# [3,] 2.000000 6.656854 16.58846 33.00000 56.90170
# [4,] 2.333333 6.990188 16.92179 33.33333 57.23503
# [5,] 2.666667 7.323521 17.25512 33.66667 57.56837
# [6,] 3.000000 7.656854 17.58846 34.00000 57.90170
# [7,] 3.333333 7.990188 17.92179 34.33333 58.23503
# [8,] 3.666667 8.323521 18.25512 34.66667 58.56837
# [9,] 4.000000 8.656854 18.58846 35.00000 58.90170
# [10,] 4.333333 8.990188 18.92179 35.33333 59.23503
# [11,] 4.666667 9.323521 19.25512 35.66667 59.56837
# [12,] 5.000000 9.656854 19.58846 36.00000 59.90170
# [13,] 5.333333 9.990188 19.92179 36.33333 60.23503
# [14,] 5.666667 10.323521 20.25512 36.66667 60.56837
# [15,] 6.000000 10.656854 20.58846 37.00000 60.90170
# [16,] 6.333333 10.990188 20.92179 37.33333 61.23503
# [17,] 6.666667 11.323521 21.25512 37.66667 61.56837
# [18,] 7.000000 11.656854 21.58846 38.00000 61.90170
# [19,] 7.333333 11.990188 21.92179 38.33333 62.23503
# [20,] 7.666667 12.323521 22.25512 38.66667 62.56837
# [21,] 8.000000 12.656854 22.58846 39.00000 62.90170
# [22,] 8.333333 12.990188 22.92179 39.33333 63.23503
# [23,] 8.666667 13.323521 23.25512 39.66667 63.56837
# [24,] 9.000000 13.656854 23.58846 40.00000 63.90170
# [25,] 9.333333 13.990188 23.92179 40.33333 64.23503
# [26,] 9.666667 14.323521 24.25512 40.66667 64.56837
# [27,] 10.000000 14.656854 24.58846 41.00000 64.90170
# [28,] 10.333333 14.990188 24.92179 41.33333 65.23503
# [29,] 10.666667 15.323521 25.25512 41.66667 65.56837
# [30,] 11.000000 15.656854 25.58846 42.00000 65.90170
# [31,] 11.333333 15.990188 25.92179 42.33333 66.23503
# [32,] 11.666667 16.323521 26.25512 42.66667 66.56837
# [33,] 12.000000 16.656854 26.58846 43.00000 66.90170
# [34,] 12.333333 16.990188 26.92179 43.33333 67.23503
# [35,] 12.666667 17.323521 27.25512 43.66667 67.56837
# [36,] 13.000000 17.656854 27.58846 44.00000 67.90170
# [37,] 13.333333 17.990188 27.92179 44.33333 68.23503
# [38,] 13.666667 18.323521 28.25512 44.66667 68.56837
# [39,] 14.000000 18.656854 28.58846 45.00000 68.90170
# [40,] 14.333333 18.990188 28.92179 45.33333 69.23503
Более сложный пример с использованием ifelse
new <-
ifelse(sqrt(row(settlements)*col(settlements)) > 5,
row(settlements)*col(settlements)^1.2,
row(settlements) + 44)
dim(new) <- dim(settlements)
new
# [,1] [,2] [,3] [,4] [,5]
# [1,] 45 45.00000 45.00000 45.00000 45.00000
# [2,] 46 46.00000 46.00000 46.00000 46.00000
# [3,] 47 47.00000 47.00000 47.00000 47.00000
# [4,] 48 48.00000 48.00000 48.00000 48.00000
# [5,] 49 49.00000 49.00000 49.00000 49.00000
# [6,] 50 50.00000 50.00000 50.00000 41.39189
# [7,] 51 51.00000 51.00000 36.94622 48.29054
# [8,] 52 52.00000 52.00000 42.22425 55.18919
# [9,] 53 53.00000 33.63474 47.50228 62.08783
# [10,] 54 54.00000 37.37193 52.78032 68.98648
# [11,] 55 55.00000 41.10912 58.05835 75.88513
# [12,] 56 56.00000 44.84631 63.33638 82.78378
# [13,] 57 29.86616 48.58351 68.61441 89.68243
# [14,] 58 32.16355 52.32070 73.89244 96.58108
# [15,] 59 34.46095 56.05789 79.17047 103.47972
# [16,] 60 36.75835 59.79509 84.44851 110.37837
# [17,] 61 39.05574 63.53228 89.72654 117.27702
# [18,] 62 41.35314 67.26947 95.00457 124.17567
# [19,] 63 43.65054 71.00666 100.28260 131.07432
# [20,] 64 45.94793 74.74386 105.56063 137.97297
# [21,] 65 48.24533 78.48105 110.83866 144.87161
# [22,] 66 50.54273 82.21824 116.11670 151.77026
# [23,] 67 52.84012 85.95543 121.39473 158.66891
# [24,] 68 55.13752 89.69263 126.67276 165.56756
# [25,] 69 57.43492 93.42982 131.95079 172.46621
# [26,] 26 59.73231 97.16701 137.22882 179.36486
# [27,] 27 62.02971 100.90421 142.50685 186.26350
# [28,] 28 64.32711 104.64140 147.78489 193.16215
# [29,] 29 66.62450 108.37859 153.06292 200.06080
# [30,] 30 68.92190 112.11578 158.34095 206.95945
# [31,] 31 71.21930 115.85298 163.61898 213.85810
# [32,] 32 73.51669 119.59017 168.89701 220.75675
# [33,] 33 75.81409 123.32736 174.17504 227.65539
# [34,] 34 78.11149 127.06456 179.45308 234.55404
# [35,] 35 80.40888 130.80175 184.73111 241.45269
# [36,] 36 82.70628 134.53894 190.00914 248.35134
# [37,] 37 85.00368 138.27613 195.28717 255.24999
# [38,] 38 87.30107 142.01333 200.56520 262.14864
# [39,] 39 89.59847 145.75052 205.84323 269.04728
# [40,] 40 91.89587 149.48771 211.12127 275.94593