使用'订单时出现问题'在R中的函数中

时间:2016-03-05 17:44:24

标签: r

我最近开始编写R并喜欢它。

然而,在尝试功能时,我遇到了一个问题。 当我尝试使用' order'在我的功能中。

当我使用下面的功能时,我得到:

  

顺序错误(dataset $ column):参数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) 

1 个答案:

答案 0 :(得分: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