Я знаю, что функции * apply являются более эффективным методом, чем циклирование при обработке данных, но я изо всех сил стараюсь сделать это в течение одной повторяющейся ситуации. Возьмите этот простой пример:Loop Problems vs Apply
Для этого data.frame «myTNorm» ...
> str(myTNorm)
'data.frame': 4631 obs. of 12 variables:
$ nc101_code: chr "NC101_00003" "NC101_00004" "NC101_00005" "NC101_00006" ...
$ D2_01 : num 5.67e-04 5.17e-05 2.50e-04 8.79e-04 8.61e-06 ...
$ D2_02 : num 1.83e-04 1.26e-05 3.35e-04 5.05e-04 1.89e-05 ...
Я хочу, чтобы просто заменить значение каждой ячейки для указанных столбцов 2: 6 с нормированным значением (т.е. CellValue/сумма (столбец)).
Я чувствую, что должен быть хороший способ использовать * применять с некоторой функцией, чтобы сделать это красиво, но может заставить его работать как цикл for. Может кто-то, пожалуйста, поделитесь соответствующим синтаксисом!
for (i in 2:6)
{
myTNorm[, i] = myTNorm[, i]/sum(myTNorm[, i])
}
Спасибо!
Если вы посмотрите вокруг сообщения на петлях против * применяются вопросы, вы увидите множество комментариев и даже полных примеров, показывающих, что * применять методы не всегда лучше, чем 'для 'петли. Для вашего вопроса 'myTNorm [, 2: 6] <- lapply (2: 6, function (i) i/sum (i))', вероятно, является стандартным * применимым решением. – lmo
@ Я думаю, что вторая часть должна быть 'lapply (myTNorm [, 2: 6], ...)' – Shape
@Shape. Вы правы, конечно. Спасибо, что поймал это. – lmo