在R中,当你进行替换时,我想快速检查一下我的期望是否满足,例如:
data("mpg")
hist(mpg$cyl)
所以只有少数汽车有5个汽缸,事实上count(mpg[mpg$cyl == 5,])
会得到确切数量,4。我只想要3个类别所以我replace
5个4:
cyl2 <- replace(mpg$cyl, mpg$cyl == 5, 4)
在这种情况下,检查所需的更改是非常简单的,只需键入hist(cyl2)
即可获得答案;但是,在一些更复杂的场景中,我希望有一个简短的声明,例如&#34; X替换版本和#34;或类似的东西,只是为了检查我的期望是否满意,在这种情况下,我预计4个替换。
有一种简单的方法吗?
答案 0 :(得分:4)
你可以写自己的功能;我发现自己经常这样做是为了向现有函数添加简单的功能,例如:
replace2<-function(x,list,values){
cat(if(is.logical(list)) sum(list) else length(list))
cat(" replacements made\n")
replace(x,list,values)
}
cyl12<-replace2(mpg$cyl, mpg$cyl == 5, 4))
示例:
x<-1:20
> replace2(x,x%%2==0,0)
10 replacements made
[1] 1 0 3 0 5 0 7 0 9 0 11 0 13 0 15 0 17 0 19 0
> replace2(x,seq(1,20,by=4),0)
5 replacements made
[1] 0 2 3 4 0 6 7 8 0 10 11 12 0 14 15 16 0 18 19 20
y<-replace2(x,x%%3==0,0)
> y
[1] 1 2 0 4 5 0 7 8 0 10 11 0 13 14 0 16 17 0 19 20
我将其保留原样,因为上述方法接近于解决此问题的一般方法,但在阅读replace
的源代码后,它没有任何意义call replace,因为函数本身只有两行长,所以特别针对这种情况,我建议:
replace2<-function(x,list,values){
cat(if(is.logical(list)) sum(list) else length(list))
cat(" replacements made\n")
x[list]<-values
x
}