我正在寻找一种方法来保存使用file.choose()导入到R的文件的文件路径。假设我有一个导入csv文件的函数,并将前N个列保存在与原始文件相同的目录中的新文件中。这样的事情:
Split<-function(N,...){
data<-read.csv(file.choose(),header=T)
write.csv(data[,1:N],paste("FILE PATH","newdata.csv"),row.names=F)}
我想拥有&#34; FILE PATH&#34;与原始csv文件所在的位置相同。由于file.choose()的机制,我无法找到一种方法来保存函数中对象的文件路径,并将其用于&#34; FILE PATH&#34;。
有什么想法吗?
感谢。
答案 0 :(得分:5)
{dirname}中的两个函数file.path和base在这种情况下可能会有所帮助。
> file_user <- file.choose()
> file_user
[1] "C:\\Users\\ohyeah\\Desktop\\chinese.txt"
> path_user <- dirname(file_user)
> path_user
[1] "C:/Users/ohyeahg/Desktop"
> newfilename <- "myresult.csv"
> newfilepath <- file.path(path_user, newfilename)
> newfilepath
[1] "C:/Users/ohyeah/Desktop/myresult.csv"
> write.csv(iris, newfilepath)
>
# there is a new file 'myresult.csv' created in the same folder
# and it contains the iris dataset.
如您所见,文件分隔符已从\\
(windows)更改为/
(linux),但是,您可以使用sep
中的file.path
参数定制它独立于平台工作。
如果您需要多次访问该用户所选目录中的多个文件,则每次重建绝对路径将非常繁琐。您只需将工作目录设置为用户选择文件夹,您就可以只读取或写入文件名。
> setwd(path_user)
> newfilename <- "myresult_new.csv"
> write.csv(iris, newfilename)
> head(read.csv(newfilename))
X Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 1 5.1 3.5 1.4 0.2 setosa
2 2 4.9 3.0 1.4 0.2 setosa
3 3 4.7 3.2 1.3 0.2 setosa
4 4 4.6 3.1 1.5 0.2 setosa
5 5 5.0 3.6 1.4 0.2 setosa
6 6 5.4 3.9 1.7 0.4 setosa