我最近开始编写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)
答案 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