2016-03-05 21 views
0

我在最近開始編碼R並喜歡它時,在函數中使用'order'時出現問題。R

但是,在嘗試使用函數時,遇到了一個問題。 我嘗試在我的函數中使用'order'時遇到問題。

,當我用我下面的函數,我得到:

錯誤的順序(數據集$列):參數1不是一個向量

我試圖尋找一個前面回答,但與沒有運氣。先謝謝你。

我的代碼:

#sample random data 
testdata <- as.data.frame(rnorm(100, 10, 1)) 
colnames(testdata) <- "x" 
testdata$y <- rnorm(100, 20, 3) 

#ABC function 
ABC_anal <- function(dataset, column, c_limit = 0.10, b_limit = 0.20){ 

    data_order <- 1:length(dataset$column) 
    dataset$vec_order <- data_order 

    dataset <- dataset[order(dataset$column),] 

    total <- sum(dataset$column) 

    for (i in 1:length(dataset$column)) dataset$Accummulated[i] <- sum(dataset$column[1:i]) 

    dataset$percentage <- dataset$Acummulated/total * 100 

    dataset$ABC <- ifelse(dataset$column < c_limit,"C", ifelse(dataset$column < b_limit,"B","A")) 

    dataset <- dataset[order(dataset$vec_order),] 

    return(dataset$ABC) 
} 

#applying 
ABC_anal(dataset = testdata, column = y) 

回答

0

dataset是一個對象。 column是一個對象。 dataset$column不是一個有效的對象。您不能正確訪問數據框中的列。

見當您嘗試testdata$column你的函數外發生了什麼:

testdata$column 
NULL # ie it doesn't exist 

您需要正確地訪問您的列。老實說,你的功能真的不應該運行,因爲y不是你的環境中的有效對象,所以函數調用不應該能夠評估它。它只運行,因爲R懶惰地執行,所以參數column=y不會被評估,直到需要它。並在那一點失敗。

有幾種解決方案,其中大部分涉及改變輸入參數column到一個字符串或整數例如:

ABC_anal <- function(dataset, column= "y"){...} 
ABC_anal <- function(dataset, column= 2L){...} 

從那裏的任何一個:

get("y", envir= as.environment(testdata)) #character 
testdata[, which(names(testdata) == column)] #character 
testdata[, column] #integer