R-在for循环中打印对象的名称

时间:2020-06-04 16:41:21

标签: r for-loop

我正在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"

有什么想法吗?请简单的例子。欢迎提供创造性的答案。

3 个答案:

答案 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是使用csv1csv2创建的。它只知道值。也许此解决方法对您有用:

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