我有一个包含大量数据帧的循环。
当我来到某些数据帧时,我的逻辑需要调整。我正在寻找一段时间来做出一个TRUE / FALSE声明,但我不确定如何解决这个问题。
我想将变量的实际名称转换为变量的文本。
my_list_of_dfs = list(iris,mtcars)
for (i in my_list_of_dfs){ if i =='iris'{ print('this works') } }
答案 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"