r之为 "["的参数征求类比
del
阅读:28
2024-10-01 17:34:08
评论:0
我开始将“[
”的论点视为类似于机枪腰带:
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
被反复求值,当它们在赋值的任一侧成对时……一切都按预期进行。那么,这到底是对是错,是否可以改进?
请您参考如下方法:
您可以先存储索引,这样它只计算一次:
idx <- datfrm$b < .5
datfrm[idx, "cc"] <- datfrm[idx, "a"]
这更易于阅读,并且在进行更改时更不容易出错。
我认为 within
可能提供了最少的输入,所以像上面那样使用 idx
,并用 within() 的输出替换原来的:
datfrm <- within(datfrm, cc[idx] <- a[idx])
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。