Как и в случае моего предыдущего вопроса , я работаю над переводом нескольких функций октавы 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 в начале или в конце?
Спасибо.