r - 如何在不重复对象名称的情况下为对象分配新值(直接覆盖)?
问题描述
我发现在 R 中覆盖对象的代码冗余且笨拙。我想知道是否有任何快捷方式可以修改或将操作应用于对象而不重复其名称。这是一个例子:
如果df
是一个名为 的列的数据框monkey
,例如,我想计算此类列上的日志并覆盖其值。我会做
df$monkey=log(df$monkey)
有没有办法做log(df$monkey)
和覆盖对象,比如“覆盖对象”的缩写?当您拥有名称很长的对象时,例如 df 或列表列表,它会变得繁琐且缓慢,尤其是当您直接在控制台上工作或快速测试操作时。所以我经常发现自己使用短对象名称,t
或者a
只是为了避免这种长语法。
解决方案
您的问题的一般答案是“不,没有”。
然而:
首先,RStudio 的自动完成功能对长变量名有很大帮助。
在基础 R 中,您可以使用with
and 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
相关功能。
推荐阅读
- netsuite - Execution log not working in Suitescript 2.0 Client script
- ssis - duplicate set key value in SSIS
- conditional - How do you conditionally show fields in "Show" component in react-admin?
- node.js - Node.js Bytecode Constant Pool Output
- linux - 同一个 git 提交的几个作者?
- javascript - Changing multiple props const to class
- eclipse - 由于包超时,Eclipse 内容辅助的问题花费了太长时间
- linux - 将参数传递给具有开关的 shell 脚本
- r - 在 write.table () r 中为 row.names 指定一个字符向量
- java - 如何解决 Log4J 无此类属性警告/错误?