2012-02-08 11 views
39

Jakie są ograniczenia co do tego, jakie znaki (i być może inne ograniczenia) mogą być użyte dla nazwy zmiennej w R?Ograniczenia nazw zmiennych w R

(Ten krzyczy z ogólnym odniesieniem, ale nie wydaje się znaleźć odpowiedź)

+3

R Pytania 7,14: http://cran.r-project.org /doc/FAQ/R-FAQ.html#What-are-valid-names_003f – James

+1

Możesz być także zainteresowany dyskusją tutaj: http://stackoverflow.com/questions/8396577/check-if-character-value-is -a-valid-r-object-name/8396658 # 8396658 –

+0

Powinieneś był znaleźć link do '? make.names' na stronie pomocy dla' read.table'. Strona pomocy, którą zawsze mam trudności z zapamiętaniem, to ta, która opisuje dozwolone znaki ucieczki, a odpowiedź brzmi "? Cytaty". –

Odpowiedz

31

może być patrząc na dyskusję z ?make.names:

składniowo poprawna nazwa składa się z liter, liczby i kropka lub znaki podkreślone i rozpoczyna się od litery lub kropki, które nie są oznaczone numerem . Nazwy takie jak ".2way" nie są poprawne, podobnie jak zastrzeżone słowa .

W samym pliku pomocy, tam jest link do listy zarezerwowanych słów, którymi są:

jeśli powtórz jeszcze podczas gdy funkcja w kolejnej przerwie

TRUE FALSE NULL Inf NaN NA NA_integer_ NA_real_ NA_complex_ NA_character_

Wiele innych dobre notatki z uwagami obejmują punkt Jamesa do R FAQ zajmuje się tym zagadnieniem i wskaźnikiem Josha do powiązanego SO question zajmującego się sprawdzaniem poprawnych składniowo nazw.

+0

Pamiętaj, że możesz użyć cokolwiek, jeśli podasz nazwę zmiennej, np. "TRUE" <-2 "jest prawidłowe. Nie mogę tego poprawnie napisać, używając składni SO :( – James

+0

Oczywiście, moim problemem było to, że szukałem w Google odwrotności ("ograniczenia") lub w zasadzie * nieprawidłowych * znaków, gdybym szukał * ważnych * znaków. –

+1

Również sama kropka jest ważna. '. = 3; print (.)' –

19

Prawie NIE! Można użyć „Przypisanie”, aby śmieszne nazwy zmiennych:

assign("1",99) 
ls() 
# [1] "1" 

Tak, to zmienna o nazwie „1”. Cyfra 1. Na szczęście to nie zmienia wartość całkowitą 1, i trzeba pracować nieco trudniej dostać swoją wartość:

1 
# [1] 1 
get("1") 
# [1] 99 

The „składniowe ograniczeń” niektórzy ludzie mogą wspomnieć są czysto nałożona przez parser. Zasadniczo nie można nazwać obiektu R. Po prostu nie możesz tego zrobić za pomocą operatora przypisania "<". "get" cię uwolni :)

+0

Czy istnieją _literalne_ żadne ograniczenia za pomocą 'assign' i' get', czy też napotkasz niektóre ograniczenia w pewnym momencie? – joran

+10

Wierzę, że fraza "wystarczy liny, aby powiesić się z" :-P –

+1

? przypisać: "Nie ma ograniczeń na" imię ": to c być non-syntaktyczną nazwą (patrz "make.names"). ". Jest to oczywiście kłamstwo: c = paste (rep (litery, 10000), collapse = ""); assign (c, 123) produkuje: Błąd w przypisaniu (c, 123): nazwy zmiennych są ograniczone do 10000 bajtów – Spacedman

2

Następujące osoby mogą nie odpowiedzieć bezpośrednio na twoje pytanie, ale bardzo nam pomogły. Wypróbuj komendę exists(), aby sprawdzić, czy coś już istnieje i w ten sposób wiesz, że nie powinieneś używać nazw systemowych dla swoich zmiennych lub funkcji. Funkcja Przykład ...

> exists('for') 
    [1] TRUE 

    >exists('myvariable') 
    [1] FALSE 
+0

Nie rozumiem, dlaczego ta odpowiedź została odrzucona, dla mnie jest to w każdym razie użyteczna informacja. – Halberdier

0

Stosując make.names() z wbudowanym w obudowie bazowej może pomóc:

is_valid_name<- function(x) 
{ 
    length_condition = if(getRversion() < "2.13.0") 256L else 10000L 
    is_short_enough = nchar(x) <= length_condition 
    is_valid_name = (make.names(x) == x) 

    final_condition = is_short_enough && is_valid_name 
    return(final_condition) 
} 
Powiązane problemy