我正在尝试用R语言编写一些与大型进程相关的代码,但是我一直遇到这个错误:
Example <- data.frame(Col1 = c(1, 2, 3, 4, 5),
COl2 = c("A", "B", "C", "D", "E"))
Example[Example$Col1 > 3,]$Col1 <- 3 #works fine, 2 rows were selected
Example[Example$Col1 < -5,]$Col1 <- 0 #gets an error, 0 rows were selected
Error in `$<-.data.frame`(`*tmp*`, Col1, value = 0) :
replacement has 1 row, data has 0
我知道造成错误的原因是没有选择零行,因此无法进行替换。但是为了使我的流程能够运行,如果该行被跳过我也不介意。
我知道我可以用一个if来避免它:
if(sum(Example$Col1 < -5) > 0){
Example[Example$Col1 < -5,]$Col1 <- 0
}
但我想知道是否有更简单(或更清晰)的方法来做这件事。有什么提示吗?
Example[Example$Col1 < -5, "Col1"] <- 0
。 - G. Grothendieck