2016-09-21 16 views
10

Mam fragment kodu, który powoduje błąd tylko przy pierwszym uruchomieniu go. O dziwo, jeśli uruchomię go po raz drugi, nie otrzymam błędu (definicja szaleństwa?). Również błąd nie pojawia się zawsze w tej samej pozycji, mam na myśli to, że jeśli dodaję kilka linii komentarzy, komunikat o błędzie zostanie wydrukowany po komentarzach, a nie po konkretnej instrukcji.R Błąd: names() zastosowane do non-vector

Nie mogę podać odtwarzalnego przykładu, ponieważ nie wiem, skąd dokładnie pochodzi błąd. Błąd jest następujący:

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

powinien określić, że w moim kodu nie mam, przynajmniej explicitly- się names() funkcję.

+0

spróbuj uruchomić linię kodu po linii i zobacz, która linia daje błąd. – niczky12

+0

Zawsze uruchamiam wiersz po wierszu w celu debugowania, problemem jest to, że nigdy nie wiem, kiedy pojawi się błąd. Spróbuje znowu. – Manfredo

+1

spróbuj uruchomić z opcjami (error = recover); skończysz w debugerze, gdy wystąpi błąd; tam możesz odkryć gdzie jesteś w kodzie i co się stało, patrz pomoc (przeglądarka) dla poleceń debuggera; Wywołanie "names()" jest prawdopodobnie w jakiejś bibliotece/paczce, do której dzwonisz. –

Odpowiedz

17

To jest podchwytliwy błąd. Byłem w stanie wyśledzić przyczynę i wydaje się, że R ma obiekt o tej samej nazwie co buforowana funkcja. Jest to najprawdopodobniej w przypadku używania IDE, takiego jak RStudio, zakładka Widok (df). O ile zakładka nie zostanie zamknięta, nawet uruchomienie funkcji bez kodu da ci ten błąd. Podobnie, jeśli zakładka nie jest zamknięta, nawet usunięcie wszystkich obiektów lub wyrzucenie śmieci nie rozwiąże problemu. Po zamknięciu karty błąd zniknie.

+0

Mogę to potwierdzić.Spróbuj utworzyć obiekt o nazwie "scalanie" i usuwanie tego samego obiektu, otrzymasz błąd (przynajmniej jeśli data.table jest załadowany, ale prawdopodobnie nawet podstawowe scalenie doprowadzi do tego). Najprawdopodobniej, ponieważ istnieją funkcje o tej nazwie. –

1

Miałem ten sam błąd i to było błędne dla konkretnej funkcji, którą napisałem. To było wyrzucanie błędu za każdym razem, gdy ładowałem funkcję, nawet gdy skomentowałem cały kod w funkcji. Zauważyłem, że zmiana nazwy zmiennej mojej funkcji zatrzymała błąd. Przypuszczam tylko, że istnieje konflikt dziwnych nazw zmiennych.

+0

mmm Przyjrzę się temu. Teraz nawet nie pamiętam skąd został zgłoszony błąd, ale mam wrażenie, że znowu się pojawi. Spróbuję zaktualizować wpis, w każdym razie dzięki :) – Manfredo

+0

Wczoraj miałem ten problem i znalazłem ten post. To na pewno dziwny błąd. Na szczęście udało mi się go obejść, ale nie mam pojęcia, dlaczego działo się coś dziwnego w związku z konfliktem nazw. – JMT2080AD

-5

Wystarczy dodać

as.vector(dataframe) 

To działa.

+2

Nie, nie ma. Poza tym przekonwertowanie df na wektor jest czymś, co raczej nie chcesz robić. – Manfredo

0

Miałem ten sam błąd. Powodem tego jest coś związanego z plikiem, który zapisałem dawno temu z nazwą "df", która zakłóca bieżącą zmienną, zwaną także df.

Rozwiązanie jest jednak proste: Znajdź problematyczny wiersz, uruchamiając pierwszą linię kodu, a następnie wyczyszczając globalne środowisko i uruchamiając je ponownie. Jeśli nie wystąpi błąd, dodaj następny wiersz i tak dalej, aż do wystąpienia błędu. Następnie zmień nazwę zmiennej w tym wierszu.

0

Nawet ja miałem ten sam błąd. Powodem w moim przypadku było to, że istniała inna ramka danych o tej samej nazwie, co funkcja wewnątrz funkcji. Zgaduję, że R zgłasza ten błąd również w przypadku niedopasowania typów. W moim przypadku nazwa po raz pierwszy została odczytana jako funkcja. Gdy R ponownie spotka się z tą samą nazwą, będzie szukał funkcji, ale zamiast tego znalazł ramkę danych.

Jedyne, co musiałem zrobić, to zmienić nazwę jednego z nich i błąd zniknął.

Powiązane problemy