Ваша проблема заключается в переносе массивов, которые вы передаете в качестве аргумента, в циклы for
. MATLAB читает for
аргументов в строке, поэтому при подаче в нее столбца будет использоваться только первая итерация. Общие комментарии:
'
- комплексная транспонирование, .'
- регулярная транспонирование. i
- это воображаемая единица в MATLAB , обычно не используют ее в качестве имени переменной. 2:1:4
делает то же самое, что и 2:4
, так как 1
является размером шага по умолчанию. ;
, после каждой строки, чтобы не допустить вывода MATLAB результата каждой строки в командное окно. Это облегчает запуск сценария, и если у вас есть матрицы с записями> 1M, отображение содержимого может даже привести к аварийному завершению программы. Даже в этом случае вы повторяете 720 записей из Cyl_P
720 раз. Для проверки содержимого переменных просто сломайте сценарий там, где это необходимо (или запустите его по частям), и изучите содержимое, где это оправдано (например, Cyl_P(1:3)
здесь будет достаточно, чтобы проверить, заполняет ли цикл вектор как задумано). Устройство вывода, которое создает код Javascript, возможно, с использованием библиотеки protovis.
Существует немного библиотек для взаимодействия с базой данных в целом, и нет библиотеки ORM.
RMySQL полезен, но вы должны писать SQL-запросы вручную, и нет способа сгенерировать их, как в ORM. Более того, это относится только к MySQL.
Еще один набор библиотек, которого R до сих пор не имеет, для меня это хорошая система для чтения аргументов командной строки: есть R getopt , но он не похож на, например, argparse в python .
Пакет FRAQ
для часто задаваемых вопросов, а-ля fortune()
. R-help будет очень весело: «Попробуйте это, library(FRAQ); faq("lattice won't print")
и т. Д.
Я хотел бы видеть возможность встраивания другого языка программирования в R более простым способом для пользователей. Я привожу это в качестве примера в некоторых реализациях Common-Lisp, можно написать функцию со встроенным кодом C, например:
(defun sample (x)
(ffi:c-inline (n1 n2) (:int :int) (values :int :int) "{
int n1 = #0, n2 = #1, out1 = 0, out2 = 1;
while (n1 <= n2) {
out1 += n1;
out2 *= n1;
n1++;
}
@(return 0)= out1;
@(return 1)= out2;
}"
:side-effects nil))
Было бы хорошо, если бы можно было написать функцию R со встроенным кодом C или lisp. (более заинтересованы в последнем) аналогичным образом.
Мне бы очень понравился профилировщик строк. Это существует в Matlab и Python и очень полезно для поиска фрагментов кода, которые занимают много времени или выполняются больше (или меньше), чем ожидалось. Большая часть моего кода включает оптимизацию функций, и сколько раз что-то повторяется, может быть неизвестно заранее (хотя большинство итераций ограничено или определено).
Стек вызовов полезен, если весь ваш код написан на R и очень прост, но, как я недавно писал об этом , он требует кропотливых усилий, если ваш код сложен.
Довольно просто разработать линейный профилировщик для данного фрагмента кода. Наивным способом является индексирование каждой строки (или только предварительно определенных разделов) и вставка вызова для записи proc.time()
этой строки. В цикле я просто перечисляю секции кода и сохраняю в двумерном списке значения proc.time
для секции i
в итерации k
. [См. Обновление ниже: на самом деле это не способ сделать линейный профилировщик для всех видов кода.]
Такой инструмент можно использовать для поиска горячих точек, аномалий (например, кода, который должен быть O (n ), но на самом деле это O (n ^ 2)), код, который может выиграть от запоминания (профилировщик строк не говорит вам об этом, но он дает вам знать, где искать), код, который по ошибке находится внутри цикла, и многое другое.
Обновление 1: вставка строки синхронизации между каждой строкой функции немного ошибочна: определение строки кода - это не просто код, разделенный пробелом. Возможность разбирать код на AST необходима для того, чтобы знать, где начинаются и заканчиваются операции. Как обсуждалось в некоторых ответах на на этот вопрос , для этого есть несколько инструментов (а именно, showTree
и walkCode
в пакете codetools
). Простое применение регулярного выражения к исходному коду - очень плохая вещь.
Естественный интерфейс для .NET framework был бы замечательным, хотя я подозреваю, что это может потребовать много работы.
EDIT: Подсветка синтаксиса из RGui также была бы замечательной.
ДРУГОЕ ИЗМЕНЕНИЕ: R.NET теперь существует для интеграции R с .NET.
A Real-Time R package would be my choice, using C Streaming perhaps.
Also I'd like a more robust web development package. Nothing as extensive as Ruby on Rails but something a bit better than Sweave combined with R2HTML, that can run on RApache. I think this needs to be a huge area of emphasis for R in general.
I realize LaTeX is better markup for certain academia but in general I think HTML should be the markup language of choice. More needs to be done in terms of R Web Apps, so applications can be hosted on huge RAM remotely and R can start being used for SaaS data applications and other graphics choices.
Собственный интерфейс .NET для RGUI. R (D) Com основан на COM, и он позволяет обмениваться только матрицами, а не более сложными структурами.
Интерфейсы к любой из новомодных баз данных Web 2.0, которые используют пары ключ-значение, а не стандартную RDMS. . Неисчерпывающий список (в алфавитном порядке) будет выглядеть так:
, и было бы, конечно, хорошо, если бы у нас была абстракция, похожая на DBI. Джефф начал с RBerkeley , но они использовали бэкэнд Oracle BerkeleyDB старой школы, а не одну из этих новых вещей.
Я бывший наркоман Mathematica, и мне очень не хватает интерфейса в стиле ноутбука. Когда я проводил исследование с помощью блокнотов, статьи писались почти сами собой, как я делал свой анализ. Но теперь, когда я использую R, я считаю, что документирование моей работы довольно утомительно.
Для людей, которые не очень знакомы с Mathematica, у вас есть документы, называемые «записными книжками», которые могут содержать код, текст, уравнения и результаты выполненного кода (которые могут быть уравнениями, текстом, графикой или интерактивными инструментами). Все можно аккуратно организовать в стилизованные подразделы или разделы, которые можно сворачивать. У вас может быть несколько открытых документов, которые интегрируются с одним общим ядром.
Хотя я не думаю, что полноценный интерфейс в стиле Mathematica полностью необходим,