r - заменить и добавить строки матрицы, начинающиеся с индекса - аналогично MATLAB / GNU Octave - PullRequest
0 голосов
/ 12 июня 2019

Как и в случае моего предыдущего вопроса , я работаю над переводом нескольких функций октавы MATLAB / GNU в R. Более конкретно, это калькулятор свойств раздела из https://www.colincaprani.com/programming/matlab/.

Я собираюсь начать с показа кода GNU Octave ниже (все, что я успешно перевел на R, вплоть до последних двух строк):

vo = [0,0; 600,0; 630,580; 1200,650; 1200,920; 900,920; 900,845; 0,845];
vi = [0,300; 300,300; 300,695; 0,695];

outer = vo

outer =
      0      0
    600      0
    630    580
   1200    650
   1200    920
    900    920
    900    845
      0    845

inner = vi

inner =
     0   300
   300   300
   300   695
     0   695

[nOC n] = size(outer)
nOC =  8
n =  2

[nIC n] = size(inner)
nIC =  4
n =  2

Создание пересмотренной внешней матрицы путем добавления и замены строк:

outer(nOC+1:2*nOC-1,1) = -outer(nOC:-1:2,1)

outer =
      0      0
    600      0
    630    580
   1200    650
   1200    920
    900    920
    900    845
      0    845
     -0      0
   -900      0
   -900      0
  -1200      0
  -1200      0
   -630      0
   -600      0

outer(nOC+1:2*nOC-1,2) = outer(nOC:-1:2,2)

outer =
      0      0
    600      0
    630    580
   1200    650
   1200    920
    900    920
    900    845
      0    845
     -0    845
   -900    845
   -900    920
  -1200    920
  -1200    650
   -630    580
   -600      0

В последних 2 строках кода MATLAB, начиная с определенного индекса (nOC + 1 = 9) внешней матрицы, добавляются строки.Таким образом, существующая строка 9 изменяется, а новая внешняя матрица в MATLAB имеет 15 строк и 2 столбца.

Это моя попытка использования эквивалентного кода R ниже:

outer <- cbind(rbind(outer[, 1, drop = FALSE], -outer[seq(nOC, 2, by = -1),
1, drop = FALSE]), rbind(outer[, 2, drop = FALSE], outer[seq(nOC, 2, by = 
-1), 2, drop = FALSE]))

outer
       [,1] [,2]
 [1,]     0    0
 [2,]   600    0
 [3,]   630  580
 [4,]  1200  650
 [5,]  1200  920
 [6,]   900  920
 [7,]   900  845
 [8,]     0  845
 [9,]     0    0
[10,]     0  845
[11,]  -900  845
[12,]  -900  920
[13,] -1200  920
[14,] -1200  650
[15,]  -630  580
[16,]  -600    0

Чтобы удалитьстрока 9:

outer <- outer[-9, ]
     [,1] [,2]
 [1,]     0    0
 [2,]   600    0
 [3,]   630  580
 [4,]  1200  650
 [5,]  1200  920
 [6,]   900  920
 [7,]   900  845
 [8,]     0  845
 [9,]     0  845
[10,]  -900  845
[11,]  -900  920
[12,] -1200  920
[13,] -1200  650
[14,]  -630  580
[15,]  -600    0

В R я не смог указать матрицу для перезаписи значений в строке 9, а затем добавить дополнительные строки.Есть ли способ скопировать код MATLAB / GNU Octave вместо удаления строки 9 в начале или в конце?

Спасибо.

...