2

过去几天我一直在学习 R,并想了解是否可以以比我的解决方案更好的方式(也许更紧凑的代码)解决以下问题。

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

  • 随机选择 M (~ 100) 个元素。
  • 将每个这样的元素x替换为f(x)

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

编辑:函数f将单个数值作为输入,并且还输出单个数值。就像是:f <- function (x) x^3 + 2

编辑:感谢大家的贡献!我现在了解了矢量化函数的威力。:)

4

2 回答 2

1

这个怎么样

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

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

于 2013-10-12T17:54:09.913 回答
0

这取决于您的函数的类型。如果f是矢量化然后

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

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

V <- sapply(V, f)

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

于 2013-10-12T18:00:14.140 回答