【发布时间】:2020-05-20 13:50:36
【问题描述】:
areseveralposts 询问如何替换已弃用的软 funs(),但没有一个解决方案对我有用。
我有一个已命名的小标题列表,并希望使用这些名称重命名几列,以准备将所有数据框连接在一起并整理数据。
以下代码正确更改(取消)选定的列名。
df <- tibble("Feature ID" = c("ABC (Homo Sapiens)", "DEF (Caenorhabditis elegans)"),
Resource = c("Homo Sapiens", "Caenorhabditis elegans"),
Name = c("ABC", "DEF"),
Signal1 = c(10, 20),
Signal2 = c(80, 90))
list("first_set" = df,
"second_set" = df) %>%
imap(~ rename_at(.x,
.vars = vars(-"Feature ID", -Resource, -Name),
.funs = funs(str_c(.y, ., sep = "_"))))
但是用 list(~str_c(.y, ., sep = "_")) 或简单地 str_c(.y, ., sep = "_") 替换 funs 会出现错误
Error in stri_c(..., sep = sep, collapse = collapse, ignore_null = TRUE) : the ... list contains fewer than 2 elements
我预计错误是数据框的名称或列名称未正确输入stri_c(),因为它表示列表太短。但是我不明白为什么它在 funs() 中起作用,而当我更改为 list 或只是 ~ 时不起作用。
【问题讨论】:
-
您能添加您的预期输出吗?
imap有什么特别的原因吗? -
@NelsonGon 不确定如何在此处添加 tibble 输出,但运行它应该可以正常工作。预期的输出只是通过添加“df1_”作为前缀来重命名列。我使用 imap 是因为我不确定如何引用小标题列表的名称 - map2 是等价的,不是吗?我很高兴发现一种更好的方法。