您好我正在尝试使用以下函数计算数据变量的组标准化值。
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 ...
有任何解决此问题的建议吗?
答案 0 :(得分:1)
如果对象是一维向量,则此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))