2017-03-25 54 views
0

我寫了一個簡單的函數,但我不知道如何爲從此函數返回的輸出基於輸入分配唯一的名稱。如何確保我的函數輸出的名稱與我的輸入有關?

而且,我使用<<-擺脫功能所需的輸出,因爲它是逃避我的腦海裏如何獲得函數的輸出,如果我在下面的代碼(邊問題)使用train <-test<-

train_data <- function(x,ratio=80){ 
set.seed(397) 
index <- 1:length(x) 
tr_index<- index[sample(c(T,F), length(x), replace = T, prob = c((ratio)/100,(100-ratio)/100))] 

train <<- x[tr_index] 
test <<- x[!(index %in% tr_index)] 
} 

我不想輸出到每次被改寫,因此,如果命令是train_data(a)我想train_atest_a出現在我的環境。我試圖強制paste0()進入這個功能,但不知道如何。謝謝。

回答

1

而不是使用全局賦值運算符到達函數環境的外部,只需讓函數返回一個包含火車和測試集的列表。我也嘗試簡化代碼:

train_data <- function(x, fraction=0.8){ 
    tr_index = sample(1:nrow(x), floor(nrow(x) * fraction))) 
    return(list(train=x[tr_index, ], test=x[-tr_index, ])) 
} 

然後,當您運行該函數時,您可以將結果分配給任何您想要的。例如:

mtcars_split = train_data(mtcars) 

對於一個矢量,則該函數將是:

train_data <- function(x, fraction=0.8){ 
    tr_index = sample(1:length(x), floor(length(x) * fraction))) 
    return(list(train=x[tr_index], test=x[-tr_index])) 
} 

你當然也可以推廣到處理任何載體或數據幀的輸入的功能。

+0

這對我很有幫助。我看到'[-index]'。我可以從列表中提取矢量。我在文章中忘了提及,我是從大字符矢量抽樣的,因此'[index]'。謝謝 – Bhail

相關問題