使用列表的原因

对于普通 R 用户,列表结构可能看起来是要操作的更复杂的数据结构之一。无法保证其中的所有元素属于同一类型; 列表将有多复杂/不复杂的保证结构(列表中的元素可以是列表)

但是,使用列表来使用它在函数之间传递参数的主要原因之一。

# Function example which returns a single element numeric vector
exampleFunction1 <- function(num1, num2){
    result <- num1 + num2
    return(result)
}

# Using example function 1
exampleFunction1(1, 2)

# Function example which returns a simple numeric vector
exampleFunction2 <- function(num1, num2, multiplier){
    tempResult1 <- num1 + num2
    tempResult2 <- tempResult1 * multiplier
    result <- c(tempResult1, tempResult2)
    return(result) 
}

# Using example function 2
exampleFunction2(1, 2, 4)

在上面的例子中,返回的结果只是简单的数字向量。没有问题可以通过这些简单的向量。

此时需要注意的是,通常,R 函数一次只返回 1 个结果(你可以使用 if 条件返回不同的结果)。但是,如果你打算创建一个函数,该函数接受一组参数并返回几种类型的结果,如数值向量(设置值)和数据框(来自计算),则需要将所有这些结果转储到列表中在回来之前。

# We will be using mtcars dataset here
# Function which returns a result that is supposed to contain multiple type of results
# This can be solved by putting the results into a list
exampleFunction3 <- function(dataframe, removeColumn, sumColumn){
    resultDataFrame <- dataframe[, -removeColumn]
    resultSum <- sum(dataframe[, sumColumn])
    resultList <- list(resultDataFrame, resultSum)
    return(resultList)
}

# Using example function 3
exampleResult <- exampleFunction3(mtcars, 2, 4)
exampleResult[[1]]
exampleResult[[2]]