R等价于Stata本地或全局宏

时间:2013-03-28 20:19:17

标签: r stata local stata-macros

我是Stata用户,正在尝试学习R.

我有几个冗长的文件夹路径,在我的Stata代码中,我存储为本地宏。我在这两个文件夹中有多个文件可供我的分析使用。

我知道,在R中,我每次想要引用其中一个文件夹中的文件时都可以更改工作目录,但这绝对不是一个好方法。即使我将文件夹路径存储为R中的字符串,我也无法弄清楚如何引用它们。例如,在Stata中我会使用`folder1'。

我想知道是否尝试在R中逐行重写Stata代码并不是学习R的最佳方法。

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:6)

首先,作为前Stata用户,我建议R for Stata Users。还有一篇关于Macros in R的文章。我认为@Nick Cox是对的,你需要学会以更不同的方式做事。但是和你一样(至少在这种情况下),我常常发现自己开始了一项新的任务,我之前已经知道如何在Stata中做这件事并从那里开始。有时我发现方法是相似的。有时,当不同的方法更好时,我可以使R像Stata一样(例如,loops vs. vectorization)。

我不确定我是否会用以下内容捕捉你的问题,但让我试试。

在Stata中,通常会写:

global mydata "path to my data directory/"

要导入数据,我只需输入:

insheet using "${mydata}myfile.csv"

作为前Stata用户,我想在R中做类似的事情。以下是我的工作:

mydata <- "path to my data directory/"

要导入位于此目录中的csv文件并创建名为myfile的数据框,我会使用:

myfile <- read.csv(paste(mydata, "myfile.csv", sep=""))

或更有效率......

myfile <- read.csv(paste0(mydata, "myfile.csv"))

我还不是一个非常高效的R用户,所以也许其他人会看到这种方法的一些缺陷。

答案 1 :(得分:5)

也许你想要file.path()

a <- "c:"
b <- "users"
c <- "charles"
d <- "desktop"

setwd(file.path(a,b,c,d))
getwd()
#----
[1] "c:/users/charles/desktop"

你可以包裹sourceread.XXX或其他任何东西来做你想做的事。

答案 2 :(得分:1)

我猜测从上下文中应用于文件的术语“本地”意味着为了提高效率而将它们加载到内存中?如果是这样,那么你需要意识到几乎所有普通的R对象都是以这种方式处理的。请参阅?read.table?load。数据保持非本地的唯一方法是将其驻留在具有支持SQL查询的接口包的数据库中,或使用ffbycol等专用包。

除此之外,Chase想要使用file.path(),任何对文件或连接的引用都是使用正确的读/加载/扫描函数完成的,字符值被赋予(不同名称)参数。您可以使用?file查看各种低级函数,也可以查看该帮助页面中的一些其他链接。您可以将一个或多个file.path构造的结果存储在一个字符向量中,该字符向量可以被命名以便于参考。

 pathvecs <- c(User= "~/", hrtg="~/Documents/Heritage/")
 pathvecs
#                   User                    hrtg 
#                   "~/" "~/Documents/Heritage/" 
pathvecs["hrtg"]
#                   hrtg 
#"~/Documents/Heritage/"