2017-06-27 129 views
0

我有一個R函數,它可以根據原始數據生成並返回列表(a)列表和(b)測試數據分區。R功能 - 從多個值列表中訪問單個返回值

我已將此功能應用於Riris數據集。然後我將列車數據分區送入lda model。截斷的輸出和錯誤消息(來自lda部分)如下所示。

下面的代碼片段:

myfunc <- function(rawdata,) { 
    .... 
    return(list(train,test))} 

dfs = create_data_partition(mydf) 
dfs[1] 
dfs[2] 

control <- trainControl(method="cv", number=10) 
metric <- "Accuracy" 

set.seed(7) 
fit_lda <- train(Species~., data=dfs[1], method="lda", metric=metric, trControl=control) 

這裏是輸出:

[[1]] 
    Sepal.Length Sepal.Width Petal.Length Petal.Width Species 
1   5.1   3.5   1.4   0.2  setosa 
2   4.9   3.0   1.4   0.2  setosa 
. 
. 
150   5.9   3.0   5.1   1.8 virginica 

[[1]] 
    Sepal.Length Sepal.Width Petal.Length Petal.Width Species 
18   5.1   3.5   1.4   0.3  setosa 
19   5.7   3.8   1.7   0.3  setosa 
. 
. 
125   6.7   3.3   5.7   2.1 virginica 
134   6.3   2.8   5.1   1.5 virginica 
138   6.4   3.1   5.5   1.8 virginica 

Error in eval(expr, envir, enclos) : object 'Species' not found 
Calls: train ... eval -> <Anonymous> -> model.frame.default -> eval -> eval 
Execution halted 

我認爲這個問題是dfs[1]不是dataframe - 而不是它有[[1]]在它的前面。這是如何在功能myfuncreturned multiple values - 我認爲這return(list(train,test))格式不正確,但我不知道這是爲什麼發生的原因。

問題 調用一個函數R返回多個值(列表),是否有單獨訪問返回值的方法後?

+1

請參閱:https://stackoverflow.com/questions/1169456/the-difference-between-and-notations-for-accessing-the-elements-of-a-lis –

+0

謝謝。很簡單。答:我需要使用'data = dfs [[1]]'而不是'data = dfs [1]'。再次感謝! –

+0

正確,但瞭解差異可能非常重要,所以請花時間在頭腦中清楚說明。 –

回答

1

使用雙方括號表示法提取單列表元素:[[。如果要提取的第一個列表元素,而不是產生一個新的列表,你需要

dfs[[1]] 

這在Language Definition多一點明確的闡述。

+0

我*想*我也在考慮這些方面。但是,我錯誤地嘗試了:'dfs [1] [1]'。我認爲第二個'[1]'可以避免創建一個新列表。 –