我正在尝试修改一个函数,该函数将从rnorm()中获取大于0.5或小于-0.5的所有元素,将其加倍并将其返回到向量中。
zzz<-function(xxx=2){
zz<-rnorm(1000)
maxi<-zz>0.5
mini<-zz<-0.5
for (i in 1:zz){
if (maxi==TRUE | mini==TRUE){
yyy<-xxx*zz[i]
count<-append(count,yyy)
}
}
count
}
我对此很新。任何帮助都感激不尽。谢谢
答案 0 :(得分:3)
以这种方式使用循环不是惯用的R. R是一种矢量化语言,这意味着不需要循环来对向量进行算术运算。我建议您阅读An Introduction to R以熟悉标准方法。
此外,我认为在函数内部计算随机向量并不是最优的(它会使调试变得困难);也许你想把它作为一个论点。
以下代码将执行您想要的操作:
v <- rnorm(5)
v
[1] -2.078349536 0.004373942 0.269364879 0.199779240 0.373235666
ind <- which(v < -0.5 | v > 0.5)
v[ind] <- v[ind] * 2
v
[1] -4.156699071 0.004373942 0.269364879 0.199779240 0.373235666
也许这样的功能有意义:
twiddle <- function(v, multiplier = 2) {
ind <- which(v < -0.5 | v > 0.5)
v[ind] <- v[ind] * multiplier
return(v)
}
或者更紧凑,只是在评论中指出v[abs(v) > 0.5] <- v[abs(v) > 0.5] * multiplier; return(v)
。
这样称呼:
u <- rnorm(1000)
twiddle(u)
答案 1 :(得分:2)
您可以尝试以下代码,询问要生成的样本数量的参数:
my.func = function(n=1000){
rn = rnorm(n)
good = rn[rn > 0.5 | rn < -0.5]
return(2*good)
}
运行my.func(1000)
以获取向量。