Czy jest możliwe tworzenie nowych nazw zmiennych w locie?
Chciałbym wczytać ramki danych z listy do nowych zmiennych z numerami na końcu. Coś jak orca1, orca2, orca3 ...
Jeśli spróbuję czegoś takiego
paste("orca",i,sep="")=list_name[[i]]
Otrzymuję ten błąd
target of assignment expands to non-language object
Czy jest inny sposób obejścia tego?
Odpowiedzi:
Zastosowanie
assign
:źródło
paste0
?Wydaje mi się, że może być lepiej z listy zamiast używać
orca1
,orca2
itp ... to byłobyorca[1]
,orca[2]
...Zwykle tworzysz listę zmiennych różniących się tylko liczbą, ponieważ ta liczba byłaby wygodnym sposobem późniejszego dostępu do nich.
W przeciwnym razie
assign
jest to, czego chcesz.źródło
Nie twórz ramek danych. Zachowaj listę, nazwij jej elementy, ale nie dołączaj jej.
Głównym tego powodem jest to, że jeśli tworzysz zmienne w ruchu, prawie zawsze będziesz później musiał powtórzyć każdy z nich, aby wykonać coś pożytecznego. Tam ponownie będziesz zmuszony do iteracji przez każdą z nazw, które utworzyłeś w locie.
O wiele łatwiej jest nazwać elementy listy i iterować po nazwach.
Jeśli chodzi o dołączanie, jest to naprawdę zła praktyka programowania w R i może prowadzić do wielu problemów, jeśli nie będziesz ostrożny.
źródło
FAQ mówi:
Jeśli masz
możesz to zrobić
dla
lub
dla
Wygląda więc na to, że używasz GET, gdy chcesz oszacować formułę, która używa zmiennej (takiej jak konkatenacja), i ASSIGN, gdy chcesz przypisać wartość do wstępnie zadeklarowanej zmiennej.
Składnia przypisania: przypisać (x, wartość)
x: nazwa zmiennej podana jako ciąg znaków. Żadne wymuszenie nie jest wykonywane, a pierwszy element wektora znakowego o długości większej niż jeden zostanie użyty z ostrzeżeniem.
wartość: wartość do przypisania x.
źródło
Innym trudnym rozwiązaniem jest nazwanie elementów listy i
attach
to:źródło
attach
to zazwyczajA ta opcja?
Działa doskonale. W podanym przykładzie brakuje pierwszej linii, a następnie pojawia się komunikat o błędzie.
źródło