5

我是一名尝试学习 R 的 Stata 用户。

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

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

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

有人可以帮忙吗?

4

3 回答 3

7

也许你想要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围绕它做任何您想做的事情。

于 2013-03-28T20:35:21.617 回答
6

首先,作为前 Stata 用户,让我为 Stata 用户推荐R。还有这篇关于R 中的 Macros 的文章。我认为@Nick Cox 是对的,您需要学习以不同的方式做事。但是像你一样(至少在这种情况下),我经常发现自己开始一项新任务,因为我事先知道如何在 Stata 中完成并从那里开始。有时我发现方法是相似的。有时我可以让 R 表现得像 Stata,而另一种方法会更好(例如,循环与向量化)。

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

在 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 用户,所以也许其他人会看到这种方法的一些缺陷。

于 2013-03-28T23:06:35.087 回答
1

我从上下文中猜测,将“本地”一词应用于文件时意味着它们已被加载到内存中以提高效率?如果是这样,那么您需要意识到几乎所有普通的 R 对象都是以这种方式处理的。见?read.table?load。数据可以保持非本地的唯一方法是将其驻留在数据库中,该数据库具有支持 SQL 查询的接口包或使用专门的包,例如ffor bycol

除了这个和 Chase 使用 file.path() 的想法之外,对文件或连接的任何引用都是使用正确的读取/加载/扫描函数完成的,其中字符值作为(各种命名的)参数给出。您可以通过该帮助页面中的一些附加链接查看各种低级功能,?file也许还可以通过该链接查看这些附加链接。您可以将一个或多个file.path构造结果存储在一个字符向量中,该字符向量可以命名以便于参考。

 pathvecs <- c(User= "~/", hrtg="~/Documents/Heritage/")
 pathvecs
#                   User                    hrtg 
#                   "~/" "~/Documents/Heritage/" 
pathvecs["hrtg"]
#                   hrtg 
#"~/Documents/Heritage/" 
于 2013-03-28T20:44:04.497 回答