2016-09-21 8 views
10

У меня есть кусок кода, который выдает ошибку только при первом запуске. Странно, если я запустил его во второй раз, я не получу ошибки (определение сумасшествия?). Также ошибка не всегда появляется в одной позиции, я имею в виду, что если добавить несколько строк комментариев, сообщение об ошибке будет напечатано после комментариев, а не после конкретной инструкции.R Ошибка: имена() применяются к не-вектору

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

Error in names(frame)[names(frame) == "x"] <- name : 
    names() applied to a non-vector 

я должен указать, что в моем коде я не -при мере explicitly- в names() функцию.

+0

попытайтесь запустить код за строкой и посмотрите, какая строка дает ошибку. – niczky12

+0

Я всегда запускаю строку за строкой для отладки, проблема в том, что я никогда не знаю, когда появится ошибка. Я попробую снова. – Manfredo

+1

попробуйте запустить с опциями (ошибка = восстановить); вы попадете в отладчик, когда произойдет ошибка; там вы можете узнать, где находитесь в коде и что произошло, см. справку (браузер) для команд отладчика; Вызов «names()», вероятно, находится в какой-либо библиотеке/пакете, который вы вызываете. –

ответ

17

Это непростая ошибка. Я смог отследить причину, и похоже, что у R есть объект с тем же именем, что и функция cached. Это наиболее вероятно, если вы используете IDE, такую ​​как RStudio, вкладку View (df). Если вкладка не закрыта, даже запуск функции без кода даст вам эту ошибку. Аналогичным образом, если вкладка не закрыта, ее не разрешат даже удаление всех объектов или сборка мусора. Как только вкладка будет закрыта, ошибка исчезнет.

+0

Я могу это подтвердить.Попробуйте создать объект с именем «merge» и удалив тот же самый объект, вы получите ошибку (по крайней мере, если загружен data.table, но, возможно, даже слияние с базой приведет к этому). Скорее всего, поскольку есть функции с этим именем. –

1

У меня была такая же ошибка, и она виновата в конкретной функции, которую я написал. Это бросало ошибку всякий раз, когда я загружал функцию, даже когда я прокомментировал весь код в функции. Я обнаружил, что изменение имени переменной моей функции остановило ошибку. Мое единственное предположение - это конфликт странных переменных.

+0

mmm Я расскажу об этом. Теперь я даже не помню, откуда была выброшена ошибка, но у меня такое чувство, что она снова появится. Я попытаюсь обновить сообщение, так или иначе спасибо :) – Manfredo

+0

У меня была эта проблема вчера и нашел этот пост. Это странная ошибка. К счастью, мне удалось найти способ обойти это, но я понятия не имею, почему происходит конфликт странных имен. – JMT2080AD

-5

Просто добавьте

as.vector(dataframe) 

Это работает.

+2

Нет, нет. Плюс преобразование df в вектор - это то, что вы вряд ли захотите сделать, я думаю. – Manfredo

0

У меня была такая же ошибка. Причиной этого является то, что связано с файлом, который я давно сохранил с именем «df», который мешает текущей переменной, также называемой df.

Решение, однако, имеет большое значение: найдите проблемную линию, выполнив первую строку кода, затем очистив глобальную среду и запустив ее снова. Если ошибка не возникает, добавьте следующую строку и так далее до появления ошибки. Затем измените имя переменной в этой строке.

0

Даже у меня была такая же ошибка. Причина в моем случае заключалась в том, что был еще один фрейм данных с тем же именем, что и функция внутри функции. Я предполагаю, что R вызывает эту ошибку, когда есть несоответствие типа. В моем случае имя было сначала прочитано как функция. Когда R снова встретится с тем же именем, он будет искать функцию, но вместо этого найдет фрейм данных.

Все, что мне нужно было сделать, это изменить имя одного из них, и ошибка исчезла.

Смежные вопросы