[英]Change names of lists at once
我有列表,我希望他們的名字用小寫字母。 我不想使用for循環,我想使用purrr
的函數
> library(purrr)
> a <- list(Header = 1, Body = 1)
> b <- list(Header = 3, Body = 2)
> list(a, b) %>%
+ walk(~ {names(.x) <<- str_to_lower(names(.x))})
> a
$Header
[1] 1
$Body
[1] 1
> b
$Header
[1] 3
$Body
[1] 2
名稱應該是"header"
和"body"
。 為什么這不起作用? 我明確使用了<<-
而不是<-
但名稱沒有改變。 我能做什么?
library(purrr)
a <- list(Header = 1, Body = 1)
b <- list(Header = 3, Body = 2)
我猜您打算通過purrr::walk
更改全局變量。 這是使符號"<<-"
起作用的選擇:
c("a", "b") %>%
walk(~ eval(parse(text = paste0("names(", ., ")<<-tolower(names(", ., "))"))))
此外,您可以使用assign(..., pos = 1)
來更改全局變量。
list(a = a, b = b) %>%
iwalk(~ assign(.y, set_names(.x, tolower(names(.x))), pos = 1))
查看
a
# $header
# [1] 1
#
# $body
# [1] 1
b
# $header
# [1] 3
#
# $body
# [1] 2
為什么不?
names(a) <- tolower(names(a))
names(b) <- tolower(names(b))
如果我理解正確,您希望對小寫名稱進行全局分配。 要一次對所有選定的對象c("a", "b")
執行此操作,您可以在函數中從全局環境中get
它們,降低名稱,並將轉換后的對象assign
舊對象(覆蓋)。
lapply(c("a", "b"), function(x) {
d <- get(x, envir=.GlobalEnv)
names(d) <- tolower(names(d))
assign(x, d, envir=.GlobalEnv)
})
names(a)
# [1] "header" "body"
names(b)
# [1] "header" "body"
數據
a <- list(Header = 1, Body = 1)
b <- list(Header = 3, Body = 2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.