r - 列表的变异逻辑
问题描述
我想使用该列表的现有插槽将元素添加到列表中。在基础R
中,我将使用以下语法:
l <- list(a = 1, b = 2, e = 1, f = 1)
## Add slot c and d which take the values from a and b respectively
l$c <- l$a
l$d <- l$b
str(l)
# List of 6
# $ a: num 1
# $ b: num 2
# $ e: num 1
# $ f: num 1
# $ c: num 1
# $ d: num 2
l$
可以通过我不想使用的attach
/ with
/来避免。within
那么这样做的规范方法是什么tidyverse
?我能想到的一种解决方案是:
library(magrittr)
library(purrr)
l <- list(a = 1, b = 2, e = 1, f = 1)
str(l %$% list_modify(l, c = a, d = b))
str(l)
# List of 6
# $ a: num 1
# $ b: num 2
# $ e: num 1
# $ f: num 1
# $ c: num 1
# $ d: num 2
但是由于其中有很多函数,tidyverse
我想知道是否有一个“更”适合目的的函数,即使用可能较少不同的库/函数调用?
更新。稍微修改了示例以突出显示并非所有列都将被复制。
解决方案
不是一个整洁的方式,但你可以这样做:
append_list <- function(l, copy_from, copy_to) {
if(length(copy_from) != length(copy_to))
stop('length of copy_from and copy_to should be equal')
l[copy_to] <- l[copy_from]
l
}
append_list(l, c('a', 'b'), c('c', 'd'))
#$a
#[1] 1
#$b
#[1] 2
#$e
#[1] 1
#$f
#[1] 1
#$c
#[1] 1
#$d
#[1] 2
append_list(l, c('a', 'b'), c('c', 'd', 'e'))
append_list(l, c("a", "b"), c("c", "d", "e")) 中的错误:copy_from 和 copy_to 的长度应该相等
推荐阅读
- sitemap - 在 wordpress 中自动生成站点地图
- c - 将长整数(十进制)转换为基数 36 字符串(C 中的 strtol 反转函数)
- python - 如何按单元格值获取数据框列索引
- node.js - 如何在阿多尼斯查询生成器中只有一列不为空的情况下应用
- c - 在 STM32F407 CORTEX-M4 上比较浮点 NaN 失败
- r - 使用 R 计算基于时间戳和组变量的新变量
- javascript - Jquery UI 可调整大小不适用于空内容
- windows - Windows 上的 git hooks 权限问题
- angular - 使用 AWS CloudFront 将 Angular 6 上编写的站点传输到 AWS S3 的问题
- sql - SQL Server SSIS 代理用户密码长度问题