【问题标题】:Soliciting analogies for arguments to "["为“[”的论点征求类比
【发布时间】:2011-05-21 02:52:53
【问题描述】:

我开始考虑将“[”的论点视为类似于机枪带:

set.seed(10)
datfrm <- data.frame(a= rev(letters[1:10]), b = runif(10), cc = letters[1:10] )
datfrm[datfrm$b < 0.5, "b"] <- 0

所以机枪传送带只运行到“[”的第一个参数:

               ---
               ---
               ---
               ---
datfrm[datfrm$b < 0.5, "b"] <- 0

但是,如果您只想对子集进行分配,比如说从另一列:

               ---                         ---
               ---                         ---
               ---                         ---
               ---                         ---
datfrm[ datfrm$b < .5, "cc"] <- datfrm[ datfrm$b < .5, "a"]

表达式datfrm$b 被反复评估,当它们在赋值的任一侧配对时......所有的都按预期进行。那么这有什么不对或不对,可以改进吗?

【问题讨论】:

  • 不确定第一行代码是什么意思,但有很多错别字 - 现在可以检查一下吗?

标签: r extract


【解决方案1】:

你可以先存储索引,这样它只计算一次:

idx <- datfrm$b < .5
datfrm[idx, "cc"] <- datfrm[idx, "a"]

这更易于阅读,并且在进行更改时不易出错。

我认为within 可能提供最少的输入,因此如上所述使用idx,并用within() 的输出替换原来的:

datfrm <- within(datfrm, cc[idx] <- a[idx])

【讨论】:

  • Within 提供了使用最少打字的方法——它绝对不是最干净的! (因为环境会影响它)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-10
  • 1970-01-01
  • 2019-04-19
  • 2016-05-06
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多