English · PDF 344
rng <- range(x, na.rm = TRUE) (x - rng[1]) / (rng[2] - rng[1]) } df$a <- rescale01(df$a) df$b <- rescale01(df$b) df$c <- rescale01(df$c) df$d <- rescale01(df$d)
要用 for 循环解决这个问题,我们再次思考这三个组成部分:
我们已经有了输出——它和输入是一样的!
我们可以把数据框看作一个列的列表,因此可以用 seq_along(df) 迭代每一列。
应用 rescale01()。
这给我们带来:
for (i in seq_along(df)) { df[[i]] <- rescale01(df[[i]]) }
通常你会用这种循环来修改列表或数据框,所以记得使用 [[,而不是 [。你可能已经注意到我在所有的 for 循环中都使用了 [[:我认为即使对于原子向量也最好使用 [[,因为这能清楚地表明我想操作单个元素。
有三种基本方式可以对向量进行循环。到目前为止我向你展示的是最通用的方式:使用 for (i in seq_along(xs)) 对数字索引进行循环,并用 x[[i]] 提取值。还有另外两种形式: