←
PDF 348 / 520 For Loops Versus Functionals
→
English · PDF 348
Original PDF page 348
中文 · PDF 348

(额外挑战:尽管变量名的长度不同,我用了什么函数来确保数字整齐对齐?)

    1. 这段代码是做什么的?它是如何工作的?
trans <- list( disp = function(x) x \* 0.0163871, am = function(x) { factor(x, labels = c("auto", "manual")) } ) for (var in names(trans)) { mtcars[[var]] <- trans[[var]](mtcars[[var]]) }

For 循环与函数式编程的对比

在 R 中,for 循环并不像在其他语言中那么重要,因为 R 是一种函数式编程语言。这意味着可以将 for 循环封装到一个函数中,然后调用该函数,而不是直接使用 for 循环。

为了理解为什么这一点很重要,请(再次)考虑这个简单的数据框:

df <- tibble( a = rnorm(10), b = rnorm(10), c = rnorm(10), d = rnorm(10) )

假设你想计算每一列的均值。你可以用 for 循环来实现:

output <- vector("double", length(df)) for (i in seq\_along(df)) { output[[i]] <- mean(df[[i]]) } output #> [1] 0.2026 -0.2068 0.1275 -0.0917

你意识到以后会经常需要计算每一列的均值,所以把它提取成一个函数:

col\_mean <- function(df) { output <- vector("double", length(df)) for (i in seq\_along(df)) {