【发布时间】:2020-08-14 23:33:48
【问题描述】:
x 是一个双精度向量,包含小于和大于 1 的数字:
x <- c(1, 2, 3, 0.1, 0.02, 0.003)
如果 x 中的一个元素小于一,我想将该元素乘以 10,直到它大于一;如果元素已经大于一,它应该保持不变。结果应该又是一个双精度向量:
(1, 2, 3, 1, 2, 3)
我觉得这应该很简单,但解决方案却让我望而却步。这是我到目前为止所做的。我定义了执行上述操作的函数 times_ten:
times_ten <- function(x) {
while (x < 1) {
x <- x * 10
}
}
然后我将这个函数应用于向量 x:
y <- sapply(c(1, 2, 3, 0.1, 0.02, 0.003), function(x) times_ten(x))
但是现在 y 是一个列表,不再是一个双精度数。更糟糕的是,y 中的所有值现在都为 NULL。
我是否必须更改功能,如果需要,如何更改?还是完全有更好的方法?
【问题讨论】: