R - 替换:如何进行更改详细,即" X替换是"

时间:2015-08-17 13:49:07

标签: r

在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个替换。

有一种简单的方法吗?

1 个答案:

答案 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
}