R Ошибка: имена() применяются к не-вектору

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

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

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

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

Ответ 1

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

Эта ошибка также появляется в моем коде каждый раз, когда я пытался удалить все через remove(list = ls()). В моем случае проблема была, что я имел объект с именем df (datatype = data.frame), а также имел View открыт в предыдущей версии df. После закрытия View ошибка исчезла.

Ответ 6

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

 as.vector(dataframe)

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