将函数应用于矢量元素的随机样本

时间:2013-10-12 17:51:28

标签: r

过去几天我一直在学习R,并想知道下面的问题是否可以以比我的解决方案更好的方式解决(比较可能更紧密的代码)。

问题:N(~1000)个数字元素的向量V需要按以下方式进行转换。

  • 随机选择M(~100)个元素。
  • f(x)替换每个此类元素 x

我的解决方案:for (i in sample(1:N, M)) V[i] = f(V[i])

编辑:函数 f 将单个数值作为输入,并输出单个数值。类似于:f <- function (x) x^3 + 2

编辑:感谢大家的贡献!我现在明白了矢量化函数的强大功能。 :)

2 个答案:

答案 0 :(得分:1)

这个怎么样

   i <- sample(1:N, M)
   V[i] <- f(V[i])

不需要for循环,因为[<-是一个矢量化函数。请参阅?"[<-"以获取有关详细信息。

答案 1 :(得分:0)

这取决于您的功能类型。如果f被矢量化,那么

V <- f(V)    #  V is a vector with random numbers

将完成这项工作。如果f接受并返回单个值,则:

V <- sapply(V, f)

值得庆幸的是,在R中,大多数函数都是矢量化的,所以第一种方法会经常运行。