在R中将目录指定为变量

时间:2014-07-16 07:03:11

标签: r

我需要使用以下参数创建一个名为PollutantMean的函数:directorypollutantid=1:332

我已经编写了大部分代码,但我无法弄清楚如何将目录指定为变量。我当前的工作目录是C:/Users/User/Documents。我尝试将变量写为:

directory <- "C:/Users/User/specdata"这并没有奏效。

接下来我尝试了以下内容:

directory <- list.files("specdata", full.names=TRUE)这也没有效果。

关于如何改变这个的任何想法?

4 个答案:

答案 0 :(得分:2)

如果您尝试将当前工作目录中的值分配给变量“directory”,为什么不采用简单方法并添加:

directory <- getwd()

这应该获取工作目录的内容并将值分配给变量“directory”。

答案 1 :(得分:0)

我已经将目录作为变量工作,我通常将它们声明为

directory<-"C://Users//User//specdata//"

收回你的榜样。 然后,如果我想读取此目录中的特定文件,我将会像:

read.table(paste(directory,"myfile.txt",sep=""),...)

在文件中写入

的过程相同
write.table(res,file=paste(directory,"myfile.txt",sep=""),...)

这有帮助吗?

编辑:然后你可以使用read.csv,它会正常工作

答案 2 :(得分:0)

我认为您对R中的作业操作感到困惑。以下一行

directory <- "C:/Users/User/specdata"

将一个字符串分配给恰好被称为directory的新对象。它与您的工作环境具有相同的效果

elephant <- "C:/Users/User/specdata"

要更改R读取其文件的位置,请使用函数setwd(设置工作目录的缩写):

setwd("C:/Users/User/specdata")

您还可以为读入数据的函数指定完整路径名(如read.table)。针对您的具体问题,

# creates a list of all files ending with `csv` (i.e. all csv files)
all.specdata.files <- list.files(path = "C:/Users/User/specdata", pattern = "csv$")

# creates a list resulting from the application of `read.csv` to 
# each of these files (which may be slow!!)
all.specdata.list <- lapply(all.specdata.files, read.csv)

然后我们使用dplyr::rbind_all将它们行绑定到一个文件中。

library(dplyr)
all.specdata <- rbind_all(all.specdata.list)

然后使用colMeans来确定宏观手段。不知道如何在不看数据的情况下执行此操作。

答案 3 :(得分:0)

假设每个300多个csv文件中的列都相同,即列j在所有文件中包含相同类型的数据,则以下示例应该是有用的:

# let's use a temp directory for storing the files
tmpdr <- tempdir()

# Let's creat a large matrix of values and then split it into many different
# files
original_data <- data.frame(matrix(rnorm(10000L), nrow = 1000L))

# write each row to a file
for(i in seq(1, nrow(original_data), by = 1)) { 
  write.csv(original_data[i, ], 
            file = paste0(tmpdr, "/", formatC(i, format = "d", width = 4, flag = 0), ".csv"), 
            row.names = FALSE)
}

# get a character vector with the full path of each of the files
files <- list.files(path = tmpdr, pattern = "\\.csv$", full.names = TRUE)

# read each file into a list
read_data <- lapply(files, read.csv)

# bind the read_data into one data.frame, 
read_data <- do.call(rbind, read_data)

# check that our two data.frames are the same.  
all.equal(read_data, original_data)
# [1] TRUE