检查循环中的特定对象名称

时间:2016-09-15 23:09:27

标签: r string variables

我有一个包含大量数据帧的循环。

当我来到某些数据帧时,我的逻辑需要调整。我正在寻找一段时间来做出一个TRUE / FALSE声明,但我不确定如何解决这个问题。

我想将变量的实际名称转换为变量的文本。

my_list_of_dfs = list(iris,mtcars)

for (i in my_list_of_dfs){ if i =='iris'{ print('this works') } }

2 个答案:

答案 0 :(得分:1)

尝试使用命名列表

# Created a named list instead...
my_list_of_dfs = list('iris'=iris, 'mtcars'=mtcars)

# check the names
names(my_list_of_dfs)
# [1] "iris"   "mtcars"

for (i in names(my_list_of_dfs) ) {
  if (i =='iris') {
    print('this works')
  }
  print (my_list_of_dfs[i]) # You can access data-frame like this...
}
顺便说一下,你还忘了if语句中条件的括号

答案 1 :(得分:1)

@Ismail的回答(如果您同意使用命名列表的想法,请提供答案)是创建一个为您生成命名列表的函数。也就是说,代替显式输入类似list('iris'=iris, 'mtcars'=mtcars)的内容,以下函数将获取R对象,将它们组合在一个列表中,并使用对象命名列表:

named_list <- function(...) {
  .l <- list(...)
  .names <- deparse(substitute(list(...)))
  .names <- strsplit(gsub("list\\(|\\)| ", "", .names), ",")[[1]]
  names(.l) <- .names
  .l
}

x <- 3
y <- data.frame(a=1,b=2)
named_list(x, y)
#> $x
#> [1] 3
#> 
#> $y
#>   a b
#> 1 1 2

my_list_of_dfs  <- named_list(iris, mtcars)
names(my_list_of_dfs )
#> [1] "iris"   "mtcars"

可以从这里跟@Ismail回答:

for (i in names(my_list_of_dfs )) {
  if (i == "iris")
    print(names(my_list_of_dfs[[i]]))
  else
    print ("This is NOT iris")
}
#> [1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width" "Species"     
#> [1] "This is NOT iris"