我有一个包含许多csv文件的文件夹,我想创建一个函数,它将接收一个数字范围作为参数,函数将通过该范围选择所选文件(名为1.csv,2.csv等)和将它们插入一个数据框中。我试过了:
fun <- function(range){
for( i in range){
dat <- read.csv("K:/R program/",i,".csv")
}
dat
}
我有一些问题。首先,我可能每次迭代都会遍历数据。其次,读取功能不起作用并产生错误。
答案 0 :(得分:1)
有两个问题:
dat
,read.csv()
,而不是将部分文件名粘贴到单个字符串中。 file.path()
函数在这里通常很有用,但是在这里使用paste0()
更方便,因为你在变量中有部分文件名并且需要添加扩展名。我可能会尝试(对您的数据做一些假设)
fun <- function(range, ...){
dat <- vector(mode = "list", length = length(range))
for (i in seq_along(range)){
path <- paste0("K:/R program", range[i], ".csv")
dat[[i]] <- read.csv(file = path, ...)
}
dat
}
一些解释,一行一行:
i
设为整数索引i
= {1,2,...,n} paste0()
i
dat
元素
dat
答案 1 :(得分:0)
sprintf应该可以工作,例如
for (i in 1:length(urls)) {
download.file(urls[i], sprintf("~/Desktop/rstats/temp%i.csv.gz", i))
}
为避免覆盖您的数据,请在每个for-step中初始化数据框并绑定行。
df <- data.frame()
library(dplyr)
for (i in 1:length(urls)) {
df.csv <- read.csv(sprintf("~/Desktop/rstats/temp%i.csv", i))
dummy.df <- df.csv %>% dplyr::select(date, package, version, country)
df <- dplyr::bind_rows(df, dummy.df)
}