过去几天我一直在学习R,并想知道下面的问题是否可以以比我的解决方案更好的方式解决(比较可能更紧密的代码)。
问题:N(~1000)个数字元素的向量V需要按以下方式进行转换。
我的解决方案:for (i in sample(1:N, M)) V[i] = f(V[i])
编辑:函数 f 将单个数值作为输入,并输出单个数值。类似于:f <- function (x) x^3 + 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
中,大多数函数都是矢量化的,所以第一种方法会经常运行。