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