Jestem użytkownikiem Staty próbującym się uczyć R. Mam kilka długich ścieżek folderów, które w moim kodzie Staty zapisałem jako locals. Mam wiele plików w obu tych folderach do wykorzystania w mojej analizie. Wiem, że w R mogę zmienić katalog roboczy za każdym razem, gdy chcę odwołać się do pliku w jednym z folderów, ale zdecydowanie nie jest to dobry sposób na zrobienie tego. Nawet jeśli przechowuję ścieżki folderów jako łańcuchy w R, nie mogę wymyślić jak się do nich odnosić (np. Używając `folder1 'w Stata). Zastanawiam się, czy próba przepisania linii kodu Staty po linii w R nie jest najlepszym sposobem na nauczenie się. Czy ktoś może pomóc?R Odpowiednik lokalnych lub globalnych makr Stata
Odpowiedz
Po pierwsze, jako dawny użytkownik Stata, pozwól mi polecić R for Stata Users. Istnieje również ten artykuł na Macros in R. Myślę, że @Nick Cox ma rację, że musisz nauczyć się robić rzeczy w bardziej odmienny sposób. Ale podobnie jak ty (przynajmniej w tym przypadku), często zaczynam od nowego zadania z moją wcześniejszą wiedzą, jak to zrobić w Stacie i od tego miejsca. Czasami stwierdzam, że podejścia są podobne. Czasami mogę sprawić, by R działał jak Stata, gdy inne podejście byłoby lepsze (np. loops vs. vectorization).
Nie jestem pewien, czy zdobędę Twoje pytanie z następującymi słowami, ale pozwól mi spróbować.
W Stata, byłoby wspólne napisać:
global mydata "path to my data directory/"
Aby zaimportować dane, chciałbym po prostu wpisać:
insheet using "${mydata}myfile.csv"
jako dawny użytkownik Stata, chcę zrobić coś podobnego w R. Oto, co robię:
mydata <- "path to my data directory/"
Aby zaimportować plik csv znajdujący się w tym katalogu i utworzyć ramkę danych led myfile, użyłbym:
myfile <- read.csv(paste(mydata, "myfile.csv", sep=""))
lub bardziej wydajnie ...
myfile <- read.csv(paste0(mydata, "myfile.csv"))
Nie jestem jeszcze zbyt skutecznym użytkownikiem R, więc może inni zauważą pewne niedociągnięcia w tym podejściu.
Stata wywołuje pobieranie nazwanego ciągu znaków (tj. Wektora znaku) jako "makro"? –
Jest to przykład użycia globalnego makra. zobacz [tutaj] (http://data.princeton.edu/stata/programming.aspx). Istnieje wiele bardziej interesujących zastosowań. –
Ah. Mam wrażenie, że R używa struktur list bardziej niż Stata. Istnieje funkcja, którą widziałem głównie w grafice sieciowej o nazwie 'modifyList', która może pozwolić na podobne zastosowania. Są również wyrażenia i funkcja "podstawiania" w domenie manipulacji językiem, która może być potrzebna do uzyskania czegoś podobnego do tej funkcji. Wygląda na to, że Stata zakłada, że otrzyma uporządkowane argumenty tekstowe bez tak wielu separatorów, podczas gdy R ma większy stopień oddzielenia wektorów znakowych od rzeczywistych elementów językowych. –
Może chcesz file.path()
?
a <- "c:"
b <- "users"
c <- "charles"
d <- "desktop"
setwd(file.path(a,b,c,d))
getwd()
#----
[1] "c:/users/charles/desktop"
Można owinąć source
lub read.XXX
lub cokolwiek innego wokół tego robić, co chcesz.
Dzięki @Chase. To odpowiada na moje pytanie. – user2012406
@ user2012406 Cieszę się, że dostałeś odpowiedź, która rozwiązała twój problem! Pomaga to poprawić jakość witryny, jeśli zaznaczysz to, klikając znacznik wyboru odpowiedzi, która rozwiązała Twój problem. (Nigdy nie jesteś zobowiązany do tego, ale pomaga to zasygnalizować innym, że odpowiedź rzeczywiście rozwiązała twój problem.) – joran
@joran Przepraszam za to. Dołączyłem do Stack Overflow kilka dni temu. Używam go i wyłączam, kiedy pojawiło się w moich wynikach wyszukiwania podczas pracy nad danymi, ale nigdy nie miałem konta do tej pory. Nadal nie mam wystarczającej reputacji, aby głosować lub cokolwiek zgodzić. Będę pamiętać, aby ponownie przeanalizować te odpowiedzi, aby uzyskać upomnienie, gdy będę potrzebować reputacji. – user2012406
Zgaduję z kontekstu, że termin "lokalny" po zastosowaniu do plików oznacza, że zostały załadowane do pamięci dla celów wydajnościowych? Jeśli tak, to musisz zdać sobie sprawę, że prawie wszystkie zwykłe obiekty R są obsługiwane w ten sposób. Zobacz ?read.table
i ?load
. Jedynym sposobem, w jaki dane mogą pozostać nielokalne, jest umieszczenie ich w bazie danych zawierającej pakiet interfejsu obsługujący zapytania SQL lub wykorzystujący wyspecjalizowane pakiety, takie jak ff
lub bycol
.
Poza tym i pomysłem Chase'a na użycie file.path(), każde odniesienie do plików lub połączeń odbywa się za pomocą odpowiednich funkcji odczytu/ładowania/skanowania, do których wartości znaków podawane są jako (różnie nazywane) argumenty. Możesz zobaczyć różne funkcje niskiego poziomu z ?file
i być może po kilku dodatkowych linkach z tej strony pomocy. Możesz przechowywać jeden lub więcej wyników konstrukcji file.path
w wektorze znakowym, który może być nazwany dla łatwego odniesienia.
pathvecs <- c(User= "~/", hrtg="~/Documents/Heritage/")
pathvecs
# User hrtg
# "~/" "~/Documents/Heritage/"
pathvecs["hrtg"]
# hrtg
#"~/Documents/Heritage/"
Przez lokalne, mam na myśli makro lokalne w Stata. Przykro mi, ale domyślam się, że nie było jasne z moim pytaniem. Wiem, jak załadować dane. Zastanawiam się, jak uniknąć powtarzania długich ścieżek plików, przechowując je jako małe "lokalne" i zamiast nich używać nazwy lokalnej. – user2012406
To nie pomaga mi zrozumieć. Nie mogę zrozumieć, dlaczego wektor nazwanych postaci nie jest skutecznym sposobem dokumentowania i zapisywania ścieżek. –
- 1. Wywołanie funkcji Stata z R
- 2. jest funkcja R dla xtnbreg Stata?
- 3. Odpowiednik "this" lub "self" w R
- 4. Na statycznych zmiennych lokalnych i globalnych w C++
- 5. Czy używanie makr w R jest bezpieczne?
- 6. Scalanie R: blokowanie zmiennych globalnych w funkcji
- 7. Pythonowy odpowiednik mclapply R()
- 8. Znalezienie lokalnych maksimów/minimów w R
- 9. Jak policzyć liczbę obserwacji w R jak Stata liczby poleceń
- 10. Stosując memisc importowania STATA .dta pliku do R
- 11. Używanie makr Win32 lub _MSC_VER wieloplatformowe
- 12. Znaczniki wartości wielkich liter w Stata
- 13. R odpowiednik funkcji filtrującej MATLAB
- 14. Hadoop i Stata
- 15. Kiedy używać lokalnych lub zdalnych aktorów?
- 16. R shiny: jak zapisać dane wejściowe na serwerze lub uzyskać dostęp do globalnych zmiennych wejściowych?
- 17. Co to jest odpowiednik Matlab/Octave lub "scalenie" R (lub "expand.grid")?
- 18. czytanie zmiennych globalnych za pomocą foreach w R
- 19. Dlaczego ls() w R nie pokazuje zmiennych globalnych?
- 20. Migracja ze Stata do Pythona
- 21. Sapply (od R) odpowiednik dla Julia?
- 22. Zwykły odpowiednik Lisp \ r wewnątrz funkcji formatu?
- 23. Czy istnieje odpowiednik pythona funkcji qchisq R?
- 24. R odpowiednik fmincon MATLABa dla ograniczonej optymalizacji?
- 25. Jaki jest R odpowiednik progu w seplenienie?
- 26. Odpowiednik źródła() R w języku Python
- 27. Scala ListBuffer (lub odpowiednik) shuffle
- 28. Makro lub odpowiednik w reStructuredText?
- 29. Odpowiednik PHP znajomego lub wewnętrznego
- 30. Etykiety JavaFX HTML (lub odpowiednik)
Myślę, że szukasz 'list.files (.)'. Zobacz [** tutaj **] (http://stackoverflow.com/questions/5758084/loop-in-r-loading-files/5758134#5758134). Sprawdź także '? List.files' dla wszystkich możliwych opcji. – Arun
"Nawet jeśli przechowuję ścieżki folderów jako ciągi w R, nie mogę wymyślić jak się do nich odwoływać (np. Używając' folder1 'w Stacie). " Czy możesz podać konkretny przykład tego problemu z kodem? – joran
@joran folder1 to nazwa zmiennej. Otaczenie go backtick/tick rozwiązuje nazwę i zwraca wartość. Myślenie o Stacie da mi koszmary nocne ... –