我是Stata用户,正在尝试学习R.
我有几个冗长的文件夹路径,在我的Stata代码中,我存储为本地宏。我在这两个文件夹中有多个文件可供我的分析使用。
我知道,在R中,我每次想要引用其中一个文件夹中的文件时都可以更改工作目录,但这绝对不是一个好方法。即使我将文件夹路径存储为R中的字符串,我也无法弄清楚如何引用它们。例如,在Stata中我会使用`folder1'。
我想知道是否尝试在R中逐行重写Stata代码并不是学习R的最佳方法。
有人可以帮忙吗?
答案 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"
你可以包裹source
或read.XXX
或其他任何东西来做你想做的事。
答案 2 :(得分:1)
我猜测从上下文中应用于文件的术语“本地”意味着为了提高效率而将它们加载到内存中?如果是这样,那么你需要意识到几乎所有普通的R对象都是以这种方式处理的。请参阅?read.table
和?load
。数据保持非本地的唯一方法是将其驻留在具有支持SQL查询的接口包的数据库中,或使用ff
或bycol
等专用包。
除此之外,Chase想要使用file.path(),任何对文件或连接的引用都是使用正确的读/加载/扫描函数完成的,字符值被赋予(不同名称)参数。您可以使用?file
查看各种低级函数,也可以查看该帮助页面中的一些其他链接。您可以将一个或多个file.path
构造的结果存储在一个字符向量中,该字符向量可以被命名以便于参考。
pathvecs <- c(User= "~/", hrtg="~/Documents/Heritage/")
pathvecs
# User hrtg
# "~/" "~/Documents/Heritage/"
pathvecs["hrtg"]
# hrtg
#"~/Documents/Heritage/"