嗨,我正在尝试使用以下函数计算数据变量的组标准化值。
groupStandardise <- function(variables, groupvariable)
{
# find out how many variables we have
variables <- as.data.frame(variables)
numvariables <- length(variables)
# find the variable names
variablenames <- colnames(variables)
# calculate the group-standardised version of each variable
for (i in 1:numvariables)
{
variablei <- variables[[i]]
variablei_name <- variablenames[[i]]
variablei_Vw <- calcWithinGroupsVariance(variablei, groupvariable)
variablei_mean <- mean(variablei)
variablei_new <- (variablei - variablei_mean)/(sqrt(variablei_Vw))
data_length <- nrow(variablei)
if (i == 1) { variables_new<-data.frame(row.names=seq(1,data_length))}
variables_new[`variablei_name`] <- variablei_new
}
return(variables_new)
}同时将函数调用为
groupstandardisedconcentrations <- groupStandardise(data[,2:14], data[,1])我收到了这个错误
seq.default(1,data_length)中的错误:'to‘必须长度为1
str(data)的输出如下(v1是组变量):
'data.frame': 45 obs. of 11 variables:
$ V1 : int 2 3 3 2 3 2 2 2 3 2 ...
$ V2 : num 1.3243 -2.4546 0.1352 0.0676 -1.1901 ...
$ V3 : num 0.913 -2.644 0.663 1.217 -0.409 ...
$ V4 : num -1.863 1.965 -0.698 -0.945 0.617 ...
$ V5 : num -0.574 1.031 -0.308 -0.574 0.354 ...
$ V6 : num -0.8963 2.5702 0.0736 -1.3671 0.9045 ...有解决这个问题的建议吗?
发布于 2017-09-20 12:45:48
如果该对象是一维向量,则此data_length <- nrow(variablei)输出一个NULL,然后当您执行此variables_new<-data.frame(row.names=seq(1,data_length))时,您将请求R给出从1到NULL的序列,从而产生错误。
您可以通过seq(1,NULL)复制错误
根据您的目标(您必须检查您的程序是否符合您的目的),您可以添加一个条件,这样错误就不会发生。
您可以将if (i == 1)更改为if (i == 1 & !is.null(data_length))
https://stackoverflow.com/questions/46320906
复制相似问题