2016-09-15 39 views
-1

我有一個有很多數據框的循環。檢查循環中的特定對象名稱

當我來到某些數據幀時,我的邏輯需要調整。我正在尋找一段時間才能做出真實/錯誤的陳述,但我不確定如何解決這個問題。

我想將變量的實際名稱轉換爲變量的文本。

my_list_of_dfs = list(iris,mtcars) 

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

回答

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語句

+0

我也同意這個命名列表的想法。我在一個單獨的答案中添加了一個自定義函數(詳細解釋它),可以用來補充這一點。 –

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"