Цикл R for дает: Ошибка в if (is.na (x)) return (0) else return (sign (x)): аргумент имеет нулевую длину

Я просматриваю большой набор данных и изолировал несколько групп, возвращающих ошибку:

Ошибка в if (is.na (x)) return (0) else return (sign (x)): аргумент имеет нулевую длину

В других сообщениях предполагалось, что это указывает на существование NULL. Тем не мение,

is.null (block_of_troublesome_data) [1] FALSE

ручная проверка df также не показывает никаких значений na (что имеет смысл, потому что я ранее запускал na.omit () для всего блока.

Что мне не хватает?

дополнительная информация: вот df, над которым работает цикл:

данные

Стол: 120 х 11

Группы: ecoregion_code [1]

ecoregion_code loc_major_basin lake_id имя_зера_дата_выборки ym doy value_ft Season_code Season 1 40 7010103 01-0022-00 ISLAND 1999-07-29 1999 7210 5.610236 2 Summer 2 40 7010103 01-0022-00 ISLAND 2000-06-18 2000 6170 6.496063 1 Весна 3 40 7010103 01-0022-00 ISLAND 2000-07-04 2000 7186 6.496063 2 Лето 4 40 7010103 01-0022-00 ISLAND 2000-08-12 2000 8 225 6.496063 2 Лето 5 40 7010103 01-0022-00 ISLAND 2000 -08-26 2000 8 239 6.496063 2 Лето 6 40 7010103 01-0022-00 ISLAND 2000-09-16 2000 9260 6.496063 3 Осень 7 40 7010103 01-0022-00 ISLAND 2001-06-03 2001 6 154 5.511811 1 Весна 8 40 7010103 01-0022-00 ISLAND 2001-06-10 2001 6 161 5.511811 1 Весна 9 40 7010103 01-0022-00 ISLAND 2001-06-17 2001 6 168 4.986877 1 Весна 10 40 7010103 01-0022-00 ISLAND 2001-10-18 2001 10 291 6.496063 3 Осень

... еще 110 строк

и вывод 'if (is.na (x)) return (0) else return (sign (x))'

if (is.na (data)) return (0) else return (sign (data)) Ошибка в Math.data.frame (data): нечисловая переменная во фрейме данных: lake_idlake_namesample_dateseason Дополнительно: Предупреждающее сообщение: В if ( is.na (data)) return (0) else return (sign (data)): длина условия> 1, и будет использоваться только первый элемент

а также

if (length (data) == 0) 0 else if is.na (x) 0 else sign (data) Ошибка: неожиданный символ в "if (length (data) == 0) 0 else if is.na"


person kray    schedule 27.02.2018    source источник
comment
Можете ли вы опубликовать образцы данных? Пожалуйста, отредактируйте вопрос с выводом dput(x). Или, если он слишком большой, с выходом dput(head(x, 20)).   -  person Rui Barradas    schedule 27.02.2018


Ответы (1)


Все векторы нулевой длины не NULL, поэтому вы можете проверить length(x):

# instead of ...
if (is.na(x)) return(0) else return(sign(x))
# try ...
if (length(x)==0) 0 else if is.na(x) 0 else sign(x)
# or equivalently ...
if(length(foo)==0 || is.na(foo)) 0 else sign(foo)

(Здесь вам может понадобиться return(...), а может и нет, это уже другая проблема.)

Тестовый пример:

foo <- numeric(0)
is.null(foo) # FALSE
if(length(foo)==0) 0 else if(is.na(foo)) 0 else sign(foo)  # 0
if(length(foo)==0 || is.na(foo)) 0 else sign(foo)  # 0
person lebatsnok    schedule 27.02.2018