bigm 求教: 基于变量X<-c(-2,-1,0,1,2),我们期望创建一个新变量Y, 令小于等于零的数值变为-log10(1-x),而大于零的数值变换为log10(1+x),应该如何处理? 我尝试用y<-if(x<=0) -log10(1-x) else log10(1+x),但是结果报错“产生了NaNs” 请问各位大侠,应该用什么命令处理此类操作啊? 谢谢!
suckbunny 回复 第1楼 的 bigm:<br /> x <- c(-2,-1,0,1,2)<br /> y <- c(-log(1-x[x<=0],10),log(1+x[x>0],10))<br /> </p>
ming_uld 回复 第1楼 的 bigm:if只会取条件里的第一个逻辑值,例如,此处你用if(x<=0),那么if会只取x<=0语句所得的第一个逻辑值,就是TRUE,所以会对所有的x执行 -log10(1-x),当然会报错。 可以用ifelse来代替,ifelse可以“识别”逻辑向量: <br /> y = ifelse(x>0, log10(1+x), -log10(1-x))<br /> 会有warning,不过不耽误使用。 </p>
suckbunny 回复 第5楼 的 nan.xiao:那就给每个数加上个身份标识: <br /> x <- c(2,-1,0,1,-2)<br /> names(x) <- seq_along(x)<br /> y <- c(-log(1-x[x<=0],10),log(1+x[x>0],10))<br /> y <- y[names(x)]<br /> </p>