我有一個有很多數據框的循環。檢查循環中的特定對象名稱
當我來到某些數據幀時,我的邏輯需要調整。我正在尋找一段時間才能做出真實/錯誤的陳述,但我不確定如何解決這個問題。
我想將變量的實際名稱轉換爲變量的文本。
my_list_of_dfs = list(iris,mtcars)
for (i in my_list_of_dfs){ if i =='iris'{ print('this works') } }
我有一個有很多數據框的循環。檢查循環中的特定對象名稱
當我來到某些數據幀時,我的邏輯需要調整。我正在尋找一段時間才能做出真實/錯誤的陳述,但我不確定如何解決這個問題。
我想將變量的實際名稱轉換爲變量的文本。
my_list_of_dfs = list(iris,mtcars)
for (i in my_list_of_dfs){ if i =='iris'{ print('this works') } }
嘗試命名列表,而不是
# 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語句
的除了通過@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"
我也同意這個命名列表的想法。我在一個單獨的答案中添加了一個自定義函數(詳細解釋它),可以用來補充這一點。 –