2017-02-16 41 views
1

我想多次運行this腳本(並在此之後執行一些其他操作)。的數據是在一個文本文件(名爲test.txt)採用以下形式:使用apply函數或for循環多次執行腳本

A B C D E 
1 2 2 1 9 
3 5 1 3 0 
2 NA 4 13 2 

並且使用

test <- read.table("test.txt",header=TRUE) 

的數據可以被轉換爲不同的格式,並且它可以在不標頭被用於進口。

我知道我應該使用apply函數,並且我使用Google搜索了很多關於使用apply函數和循環的方法,但是我無法成功實現它們。在EVAL

for(i in names(table)){ 
    message("Name of the data set:", i) 
    outlierKD(table, i)} 

錯誤(表達式,ENVIR,enclos)::

例如,我得到一個錯誤信息運行下面的代碼之後的對象的 'i' 不是found`。

我找到了關於循環索引的討論here,並且還發現exists(i)在消息正確顯示時返回false。

我想執行outlier函數,該函數使用apply函數或循環檢查數據的所有列中的離羣值。

回答

0

(我想修改劇本了一下,並將其存儲在一個.R文件以及該腳本,將執行它多次(和做一些其他的事情),這樣:)

test <- read.table("test.txt",header=TRUE) 
source("outlierKD_mod.r") 
source("loopscript.r") 
loopscript(test) 

這並沒有工作,我開始創建基於@塞繆爾的一個單一的代碼腳本(如果沒有函數聲明),它可以複製粘貼到R控制檯。該對的outlierKD腳本要修改的唯一的是,這條線不得不被替換:

assign(as.character(as.list(match.call())$test), test, envir = .GlobalEnv) 

與此:

test[x]=var_name 

This命令將刪除列添加到數據幀由離羣值檢查:

test <- subset(test, select = -c(i)) 
0

你可以嘗試這樣的事:

source("https://datascienceplus.com/rscript/outlier.R") 

A = c(1, 3, 2, 2, 3) 
B = c(2, 5, 0, 1, 6) 
C = c(2, 1, 4, 7, 8) 
D = c(1, 3, 99, 4, 2) 
E = c(9, 0, 2, 8, 4) 

df = data.frame(A, B, C, D, E) 

x <- 0 

for (i in df) { 
    x <- x + 1 
    names <- names(df) 
    message("Variable: ", names[x]) 
    outlierKD(dt = df, var = i) 
} 

希望它能幫助!

+0

對於當腳本刪除離羣某種原因,原始的列保持不變,一個名爲'i'創建新列,其中離羣值是重移動。 – zoli

0

在這種情況下使用for循環更容易。

test <- read.table("test.txt", header=TRUE) #copied and pasted 
test 

source("https://datascienceplus.com/rscript/outlier.R") #function 

for(i in 1:ncol(test)) outlierKD(dt=test, i) 
在R控制檯(交互)

然後,按下鍵Y揭示地塊

+0

不幸的是,該腳本不「看」到的數據是這樣的: '離羣的列表:0 1意見 離羣的比例(%):0 平均異常值:NaN的 平均不去除異常值:1 意思是如果我們刪除異常值:1' – zoli