将先前的列表元素传递给 R 中的新列表元素
Pass previous list element to new list element in R
我有几个有序变量和因子变量的数据框。我想从有序变量创建一个新的数字变量数据框。我希望将所有数据帧存储在分层列表结构中。
我想知道是否有一种简单的一步法来使用列表元素创建下一个元素?
生成所需输出的两步法的可重现示例:
library(dplyr)
# Step 1: Create list with first element
my_list <- list(
ord = data.frame(
a1 = letters[1:3],
a2 = ordered(1:3)
)
)
# Step 2: Add second element
my_list$cont <- mutate(
my_list$ord, # I want to use the previous list element "ord" to create the next
across(-a1, as.numeric)
)
# The desired output:
my_list
> $ord
A data.frame: 3 × 2
a1 a2
<chr> <ord>
a 1
b 2
c 3
> $cont
A data.frame: 3 × 2
a1 a2
<chr> <dbl>
a 1
b 2
c 3
上面的工作示例看起来很先进,但是通过这种方式添加更多列表项和对数据框的更多操作,它很快就会变得更加复杂。
这就是为什么我想知道是否有更简单的方法,例如在创建列表时将上一个列表项传递给下一个列表项。下面是我想要实现的一步法的伪代码示例:
library(dplyr)
my_list <- list(
ord = data.frame(
a1 = letters[1:3],
a2 = ordered(1:3)
),
cont = mutate(
my_list$ord, # I want to use the previous list element "ord" to create the next
across(-a1, as.numeric)
)
)
my_list
根据 lhs' 的评论,使用 lst()
而不是 list()
创建列表的解决方案实际上相当简单。
来自 lst()
的 R 帮助页面:"lst() 按顺序构建组件。定义组件时,您可以参考调用之前创建的组件。"
工作代码示例:
library(dplyr) # (Imported from "tibble")
my_list <- lst(
ord = data.frame(
a1 = letters[1:3],
a2 = ordered(1:3)
),
cont = mutate(
ord, # Using previous list component
across(-a1, as.numeric)
)
)
my_list
我有几个有序变量和因子变量的数据框。我想从有序变量创建一个新的数字变量数据框。我希望将所有数据帧存储在分层列表结构中。
我想知道是否有一种简单的一步法来使用列表元素创建下一个元素?
生成所需输出的两步法的可重现示例:
library(dplyr)
# Step 1: Create list with first element
my_list <- list(
ord = data.frame(
a1 = letters[1:3],
a2 = ordered(1:3)
)
)
# Step 2: Add second element
my_list$cont <- mutate(
my_list$ord, # I want to use the previous list element "ord" to create the next
across(-a1, as.numeric)
)
# The desired output:
my_list
> $ord
A data.frame: 3 × 2
a1 a2
<chr> <ord>
a 1
b 2
c 3
> $cont
A data.frame: 3 × 2
a1 a2
<chr> <dbl>
a 1
b 2
c 3
上面的工作示例看起来很先进,但是通过这种方式添加更多列表项和对数据框的更多操作,它很快就会变得更加复杂。
这就是为什么我想知道是否有更简单的方法,例如在创建列表时将上一个列表项传递给下一个列表项。下面是我想要实现的一步法的伪代码示例:
library(dplyr)
my_list <- list(
ord = data.frame(
a1 = letters[1:3],
a2 = ordered(1:3)
),
cont = mutate(
my_list$ord, # I want to use the previous list element "ord" to create the next
across(-a1, as.numeric)
)
)
my_list
根据 lhs' 的评论,使用 lst()
而不是 list()
创建列表的解决方案实际上相当简单。
来自 lst()
的 R 帮助页面:"lst() 按顺序构建组件。定义组件时,您可以参考调用之前创建的组件。"
工作代码示例:
library(dplyr) # (Imported from "tibble")
my_list <- lst(
ord = data.frame(
a1 = letters[1:3],
a2 = ordered(1:3)
),
cont = mutate(
ord, # Using previous list component
across(-a1, as.numeric)
)
)
my_list