使用列表的原因

對於普通 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]]