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.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号