楼主:
locka (locka)
2019-03-27 23:19:58感谢 celestialgod 版主大大提点:
以前以为 *apply 家族的函数就已经是向量化(vectorized)的写法了
查了资料才发现其实底层背后还是有 for 循环 (觉得震撼啊...)
试试看这样的写法
theta <- seq(0,1,len=100)
df <- rep(19,len=100)
n <- rep(20,len=100)
vrt <- Vectorize(rt)
x <- vrt(n=n, df=df, ncp=1/theta)
于是 x[,1] ... x[,100] 就是100个 n 等于20 然后对应各自 delta 值的 t 分配样本了
(但是不知道 df, n 的预先定义有没有意义?)
请版上各位高手再指点~ 谢谢大家
======
补充:
但还是有查到 *apply function 的好处:
1. 程式易读性
2. 会 pre-allocate 向量的内存空间
2. 只影响区域变量不会改变全域变量
ref: https://www.r-bloggers.com/vectorization-in-r-why/
※ 引述《ntpuisbest (阿龙)》之铭言:
: n <- 20
: theta=seq(0,1,len=100)
: rt(n ,1/theta )
: 如题
: 我想要生100组 ,每组都是n=20的t分配样本
: 只是这100组的theta都不一样
: 我像上面那样打 只会回传20个样本
: 并不是我想要的 2000个样本 请问要如何打才能要我要的结果
: 想避免for loop
: 用loop的话 我知道怎么做
作者:
VIATOR (阿布拉卡达不拉)
2019-04-11 23:57:00*apply各种变形各有些微不同,之后可能还要用do.call,rbind而且如果想用平行运算,可能还要改回foreach我虽然会用*apply了,但常常怀疑*apply的好处preallocate 大概是我目前唯一觉得的好处但懂得自己preallocate 的话,其实for循环也没什么不好