首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >purrr:purrr 2和modify_at

purrr:purrr 2和modify_at
EN

Stack Overflow用户
提问于 2020-02-26 15:37:02
回答 3查看 421关注 0票数 2

考虑下列清单

代码语言:javascript
复制
df <- list(list(a = 1, b = NA_real_, c = NA_real_, d = NA_real_, e = NA_real_), 
    list(a = 1, b = NA_real_, c = NA_real_, d = NA_real_, e = NA_real_), 
    list(a = 1, b = NA_real_, c = NA_real_, d = NA_real_, e = NA_real_), 
    list(a = 1, b = NA_real_, c = NA_real_, d = NA_real_, e = NA_real_), 
    list(a = 1, b = NA_real_, c = NA_real_, d = NA_real_, e = NA_real_))

我希望根据外部列表索引更改"a“位置中的值,如下所示:

代码语言:javascript
复制
df[[1]]$a <- 1
df[[2]]$a <- 2
df[[3]]$a <- 3

但是我想使用purrr函数,比如

代码语言:javascript
复制
library(tidyverse)
df %>% 
  modify_depth(1, ~modify_at(., "a", ~. + 1))

我很肯定我们可以用modify2来做这样的事情。但别明白。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-02-26 16:24:06

基本上与@tmfmnk相同,但使用modify2()

代码语言:javascript
复制
library(purrr)

modify2(df, seq_along(df), ~ list_modify(.x, .y))

注意,按位置更改a。可能想要做a = .y,并且更明确。

我想那应该是:

代码语言:javascript
复制
df2 <- df %>% 
  modify2(., seq_along(.), ~ list_modify(.x, a = .y))

df2[3]

# [[1]]
# [[1]]$a
# [1] 3
# 
# [[1]]$b
# [1] NA
# 
# [[1]]$c
# [1] NA
# 
# [[1]]$d
# [1] NA
# 
# [[1]]$e
# [1] NA

编辑:

看看@camille的另一个回复,这可能是最干净的。

代码语言:javascript
复制
df %>% 
  imap(~ list_modify(.x, a = .y))
票数 3
EN

Stack Overflow用户

发布于 2020-02-26 16:04:18

另一种选择可以是:

代码语言:javascript
复制
map2(.x = df,
     .y = 1:length(df),
     ~ update_list(.x, a = ~ .y))

[[1]]
[[1]]$a
[1] 1

[[1]]$b
[1] NA

[[1]]$c
[1] NA

[[1]]$d
[1] NA

[[1]]$e
[1] NA


[[2]]
[[2]]$a
[1] 2

[[2]]$b
[1] NA

[[2]]$c
[1] NA

[[2]]$d
[1] NA

[[2]]$e
[1] NA
票数 2
EN

Stack Overflow用户

发布于 2020-02-26 15:45:38

也许没有您想要的那么整洁,但是使用purrr::imap可以让您访问项的索引,然后可以将这些索引分配给每个"a"元素。一定要把名单还给我。AFAIK --您将在imodify中获得相同的结果。

代码语言:javascript
复制
library(purrr)

df2 <- df %>%
  imap(function(l, i) {
    l[["a"]] <- i
    l
  })
df2[4]
#> [[1]]
#> [[1]]$a
#> [1] 4
#> 
#> [[1]]$b
#> [1] NA
#> 
#> [[1]]$c
#> [1] NA
#> 
#> [[1]]$d
#> [1] NA
#> 
#> [[1]]$e
#> [1] NA
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60417444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档