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 - это список, а не a удвоится. Хуже того, все значения в y теперь равны NULL.
Нужно ли менять функцию, и если да, то как? Или есть лучший подход полностью?