Tôi là người dùng Stata đang cố gắng tìm hiểu R. Tôi có một vài đường dẫn thư mục dài, trong mã Stata của tôi, tôi được lưu trữ làm người dân địa phương. Tôi có nhiều tệp trong cả hai thư mục đó để sử dụng trong phân tích của mình. Tôi biết, trong R, tôi có thể thay đổi thư mục làm việc mỗi khi tôi muốn tham khảo một tập tin trong một trong các thư mục nhưng nó chắc chắn không phải là một cách tốt để làm điều đó. Ngay cả khi tôi lưu trữ đường dẫn thư mục dưới dạng chuỗi trong R, tôi không thể tìm ra cách để tham chiếu đến các đường dẫn đó (như sử dụng `folder1 'trong Stata). Tôi tự hỏi nếu cố gắng để viết lại dòng mã Stata bằng dòng trong R không phải là cách tốt nhất để tìm hiểu R. Ai đó có thể xin giúp đỡ?R tương đương với các macro cục bộ hoặc toàn cục Stata
Trả lời
Trước tiên, với tư cách là người dùng cũ của Stata, hãy để tôi giới thiệu R for Stata Users. Ngoài ra còn có bài viết này trên Macros in R. Tôi nghĩ rằng @Nick Cox là đúng mà bạn cần phải học cách làm những việc khác nhau hơn. Nhưng giống như bạn (ít nhất trong trường hợp này), tôi thường thấy mình bắt đầu một nhiệm vụ mới với kiến thức trước đây của tôi về cách làm điều đó trong Stata và đi từ đó. Đôi khi tôi thấy cách tiếp cận tương tự. Đôi khi tôi có thể làm cho R hành động như Stata khi một cách tiếp cận khác sẽ tốt hơn (ví dụ: loops vs. vectorization).
Tôi không chắc chắn nếu tôi sẽ nắm bắt câu hỏi của bạn với những điều sau đây, nhưng hãy để tôi thử.
Trong Stata, nó sẽ được phổ biến để viết:
global mydata "path to my data directory/"
Để nhập dữ liệu, tôi sẽ chỉ cần gõ:
insheet using "${mydata}myfile.csv"
Là một cựu người sử dụng Stata, tôi muốn làm một cái gì đó tương tự trong R. Đây là những gì tôi làm:
mydata <- "path to my data directory/"
Để nhập tệp csv nằm trong thư mục này và tạo khung dữ liệu cal dẫn myfile, tôi sẽ sử dụng:
myfile <- read.csv(paste(mydata, "myfile.csv", sep=""))
hoặc hiệu quả hơn ...
myfile <- read.csv(paste0(mydata, "myfile.csv"))
Tôi không phải là người dùng R rất hiệu quả, vì vậy có thể những người khác sẽ thấy một số sai sót trong phương pháp này.
Gọi Stata truy xuất chuỗi có tên (ví dụ: vector ký tự) là 'macro'? –
Đây là một ví dụ về việc sử dụng macro toàn cục. xem [ở đây] (http://data.princeton.edu/stata/programming.aspx). Có nhiều công dụng thú vị hơn. –
Ah. Ấn tượng của tôi là R sử dụng cấu trúc danh sách nhiều hơn Stata. Có một chức năng mà tôi đã thấy chủ yếu được sử dụng trong đồ họa mạng gọi là 'modifyList' mà có thể cho phép sử dụng tương tự. Ngoài ra còn có các biểu thức và hàm 'replace' trong miền thao tác ngôn ngữ có thể cần thiết để có được một cái gì đó giống như chức năng đó. Có vẻ như Stata cho rằng nó sẽ nhận được các đối số văn bản có thứ tự mà không có nhiều dấu phân cách trong khi R có mức độ tách các vectơ ký tự lớn hơn từ các phần tử ngôn ngữ thực tế. –
Có thể bạn muốn file.path()
?
a <- "c:"
b <- "users"
c <- "charles"
d <- "desktop"
setwd(file.path(a,b,c,d))
getwd()
#----
[1] "c:/users/charles/desktop"
Bạn có thể quấn source
hoặc read.XXX
hoặc bất cứ điều gì khác xung quanh đó để làm những gì bạn muốn.
Cảm ơn @Chase. Điều đó trả lời câu hỏi của tôi. – user2012406
@ user2012406 Tôi rất vui khi bạn nhận được câu trả lời đã giải quyết được vấn đề của bạn! Nó giúp cải thiện chất lượng của trang web nếu bạn chỉ ra điều này bằng cách nhấp vào dấu kiểm bằng câu trả lời đã giải quyết được vấn đề của bạn. (Bạn không bao giờ có nghĩa vụ phải làm như vậy, nhưng nó giúp tín hiệu cho những người khác mà câu trả lời thực sự giải quyết vấn đề của bạn.) – joran
@joran Xin lỗi về điều đó. Tôi đã tham gia Stack Overflow chỉ vài ngày trước. Tôi đã sử dụng nó và tắt khi nó xuất hiện trong kết quả tìm kiếm của tôi khi làm việc trên stata nhưng tôi chưa bao giờ có một tài khoản cho đến bây giờ. Tôi vẫn không có đủ danh tiếng để upvote hoặc downvote bất cứ điều gì. Tôi sẽ nhớ xem lại những câu trả lời này để upvote khi tôi có được danh tiếng cần thiết. – user2012406
Tôi đoán từ ngữ cảnh cụm từ "cục bộ" khi áp dụng cho tệp có nghĩa là chúng đã được tải vào bộ nhớ cho mục đích hiệu quả? Nếu vậy, thì bạn cần nhận ra rằng khá nhiều đối tượng R thông thường được xử lý theo cách đó. Xem ?read.table
và ?load
. Cách duy nhất dữ liệu có thể vẫn không phải là cục bộ là có nó nằm trong cơ sở dữ liệu có gói giao diện hỗ trợ truy vấn SQL hoặc sử dụng các gói chuyên biệt như ff
hoặc bycol
. Ngoài việc đó và ý tưởng của Chase sử dụng file.path(), bất kỳ tham chiếu đến tệp hoặc kết nối nào được thực hiện bằng cách sử dụng các hàm đọc/tải/quét thích hợp mà các giá trị ký tự được đưa ra dưới dạng các đối số khác nhau. Bạn có thể thấy nhiều chức năng cấp thấp với ?file
và có thể theo một số liên kết bổ sung từ trang trợ giúp đó. Bạn có thể lưu trữ một hoặc nhiều kết quả của việc xây dựng file.path
trong một vectơ ký tự có thể được đặt tên để dễ tham khảo.
pathvecs <- c(User= "~/", hrtg="~/Documents/Heritage/")
pathvecs
# User hrtg
# "~/" "~/Documents/Heritage/"
pathvecs["hrtg"]
# hrtg
#"~/Documents/Heritage/"
Theo địa phương, tôi có nghĩa là macro địa phương trong Stata. Tôi xin lỗi nhưng tôi đoán tôi không rõ ràng với câu hỏi của tôi. Tôi biết cách tải dữ liệu. Tôi đang tìm cách tránh lặp lại đường dẫn tệp dài bằng cách lưu trữ chúng dưới dạng "cục bộ" nhỏ và sử dụng tên cục bộ thay thế. – user2012406
Điều đó không giúp tôi hiểu. Tôi không thể tìm ra lý do tại sao một vector nhân vật được đặt tên không phải là một cách hiệu quả để tài liệu và lưu trữ đường dẫn. –
Tôi nghĩ bạn đang tìm kiếm 'list.files (.)'. Xem [** đây **] (http://stackoverflow.com/questions/5758084/loop-in-r-loading-files/5758134#5758134). Ngoài ra kiểm tra '? List.files' cho tất cả các tùy chọn có thể. – Arun
"Ngay cả khi tôi lưu trữ đường dẫn thư mục dưới dạng chuỗi trong R, tôi không thể tìm ra cách để tham chiếu đến các đường dẫn đó (như sử dụng' thư mục1 'trong Stata). " Bạn có thể đưa ra một ví dụ cụ thể về vấn đề này, với mã? – joran
@joran folder1 là tên của biến. Xung quanh nó với backtick/tick giải quyết tên và trả về giá trị. Suy nghĩ về Stata sẽ cho tôi những cơn ác mộng ... –