【发布时间】:2014-12-16 22:21:43
【问题描述】:
假设我是一个有坏习惯的懒惰程序员(碰巧不知道 plyr/dplyr),我喜欢做这样的操作:
`[<-`((z<-reshape2::melt(iris)), z[,"value"]>5, 3, 100)
融化iris,然后将值100分配给value大于5的行,然后返回所有行,而不仅仅是选定的行。这个功能在?"["的页面上有描述
与replace() 相同的代码(几乎相同)
z[,"value"] <- replace(i <- ((z <- reshape2::melt(iris))[,"value"]), i > 5, 100)
1) 但问题是:有没有办法使用标准括号符号iris[<-, blah, blah, blah, ?] 调用[<- 函数?
编辑 2016 年 7 月:所以这个问题的目的不是复制操作。数据无关紧要,示例无关紧要,重塑数据的复杂方式无关紧要。
【问题讨论】:
-
你可以定义一个函数
`[.myClass` <- function(stuff) assign(stuff)或者类似的东西然后class(iris) <- "myClass" -
嗯,也许程序员应该停止如此懒惰并投入一些工作......哈哈:)
-
`[<-`(z=reshape2::melt(iris),z[3]>5,3,100)会减少击键次数。我不知道为什么这很重要。 “使用标准的功能..”是什么意思?你的意思是“不使用”?如果您实际上是在玩代码高尔夫,那是一回事,但是找出做某事所需的最少击键次数似乎是一种容易出错的浪费时间,并且由于您组合了如此多的步骤,因此使脚本更难调试合而为一。这并没有节省大量时间 -
我也很难理解你为什么要把这么多东西塞进一个难以理解的陈述中。我的建议是
within(reshape2::melt(iris), value[value > 5] <- 100)。 -
iris[iris > 5]