我正在R中使用for循环将一些代码应用于多个文件。我想在循环的每个迭代之后保存一个输出文件,根据在该循环的迭代中要处理的文件来命名。如何在循环的每一轮中打印正在使用的文件的名称?
我对for循环的理解是为它提供list
和一些code
,然后遍历list
上的每个项目并应用code
对此。因此在我看来,我应该能够在循环的每一轮中使用的list
上提取项目的名称。如果这是错误的,请纠正我。
经过大量搜索,这是我所能获得的最接近的结果:
# load lines files
csv1 <- read.csv("csv1.csv")
csv2 <- read.csv("csv2.csv")
# make list of lines files
object.list <- list(csv1, csv2)
for(i in object.list){
print(deparse(substitute(i)))
}
哪个生产
[1] "i"
[1] "i"
但是我希望它产生
[1] "csv1"
[1] "csv2"
有什么想法吗?请简单的例子。欢迎提供创造性的答案。
答案 0 :(得分:2)
如何命名列表元素:
# load lines files
csv1 <- "file content"
csv2 <- "some other file content"
# make list of lines files
object.list <- list(csv1 = csv1, csv2 = csv2)
for(name in names(object.list)){
print(name)
print(object.list[[name]])
}
答案 1 :(得分:1)
我不认为有直接的方法可以做到。 R不记得i
是使用csv1
和csv2
创建的。它只知道值。也许此解决方法对您有用:
object.list <- list(csv1, csv2)
names(object.list) <- c( substitute(csv1), substitute(csv2))
for(i in 1:length(object.list){
print(names(object.list[i]))
}
将原始变量添加为名称,以便以后使用。
答案 2 :(得分:0)
通过更改工作流程可能会更好地为您服务...这是一个示例,其中使用了我放置的一些csv文件
# You could also do this via a system call
# No need for a list a vector will do
files_to_read <- c("bfwicox.csv", "churn.csv")
# Name automatically
names(files_to_read) <- files_to_read
# Now run loop
for(name in names(files_to_read)){
data <- read.csv(files_to_read[[name]])
print(paste("This is a summary of the first two variables in file...",
files_to_read[[name]]))
print(summary(data[1:2]))
}
[1] "This is a summary of the first two variables in file... bfwicox.csv"
X income
Min. : 1 Min. : 1100
1st Qu.: 4250 1st Qu.: 25000
Median : 8500 Median : 40000
Mean : 8500 Mean : 50687
3rd Qu.:12750 3rd Qu.: 65000
Max. :16999 Max. :250000
[1] "This is a summary of the first two variables in file... churn.csv"
ID ACLENGTH
Length:5000 Min. : 0.0
Class :character 1st Qu.: 73.0
Mode :character Median :100.0
Mean :100.9
3rd Qu.:127.0
Max. :227.0