Преобразование кода из Matlab в R "~ существует" - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь преобразовать код MATLAB в код R . В MATLAB у меня есть следующий символ

if (~exist('Arch', 'var')), Arch = 5; end
if ~isfield(opt,'HIS'), opt.HIS = 1; end
if ~isfield(opt,'HERS'), opt.HERS = inf; end
if ~isfield(opt,'MINE'), opt.MINE = 0; end

~ в MATLAB интерпретируется как Найти логическое НЕ

спасибо на ответы ниже первая строка кода становится

 if (!all(sapply(c("A","B"), exists))){A = 5}

, а для второй части следующий код, похоже, не работает. isfield (S, field) in MATLAB возвращает 1, если field является именем поля в массиве структур S. В противном случае возвращается 0. В моем случае S = opt является struct R-функция. Как правильно перевести ~ в этой части?

if (!isfield(opt,'HIS') {opt.HIS <- 1}                                   
if (!isfield(opt,'HERS') {opt.HERS <- inf}                                   
if (!isfield(opt,'MINE') {opt.MINE <- 0}

1 Ответ

1 голос
/ 05 августа 2020

В R, exists() применяется только к одному символу. Может быть !all(sapply(c("A","B"), exists))? (Это предполагает, что exist в MATLAB истинно, только если все указанные символы определены.)

Из того, что я могу сказать из документации MATLAB , кажется, что аналог !isfield(opt,'MINE') будет !('MINE' %in% names(opt)), но это может зависеть от класса opt (например, если это объект S4, который не будет работать).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...