首页 > 解决方案 > 如何在不重复对象名称的情况下为对象分配新值(直接覆盖)?

问题描述

我发现在 R 中覆盖对象的代码冗余且笨拙。我想知道是否有任何快捷方式可以修改或将操作应用于对象而不重复其名称。这是一个例子:

如果df是一个名为 的列的数据框monkey,例如,我想计算此类列上的日志并覆盖其值。我会做

df$monkey=log(df$monkey)

有没有办法做log(df$monkey)和覆盖对象,比如“覆盖对象”的缩写?当您拥有名称很长的对象时,例如 df 或列表列表,它会变得繁琐且缓慢,尤其是当您直接在控制台上工作或快速测试操作时。所以我经常发现自己使用短对象名称,t或者a只是为了避免这种长语法。

标签: r

解决方案


您的问题的一般答案是“不,没有”。

然而:

首先,RStudio 的自动完成功能对长变量名有很大帮助。

在基础 R 中,您可以使用withand within,但它们仅在您需要多个分配时才节省输入:

iris <- within(iris, {
  Sepal.Length <- log(Sepal.Length)
  Sepal.Width <- log(Sepal.Width)
  })

我的选择是 data.table 包:

library(data.table)
setDT(iris)
iris[, Sepal.Length := log(Sepal.Length)]

我喜欢这种语法(避免多次写入 data.table 名称)而且它也非常高效(对于大数据)。

另一种选择是 dplyr 包及其mutate相关功能。


推荐阅读