R-Programming:seq.default(1,data_length)中的错误:'to'的长度必须为1

时间:2017-09-20 11:32:01

标签: r

您好我正在尝试使用以下函数计算数据变量的组标准化值。

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 ...

有任何解决此问题的建议吗?

1 个答案:

答案 0 :(得分:1)

如果对象是一维向量,则此data_length <- nrow(variablei)会输出NULL,然后当您执行此操作variables_new<-data.frame(row.names=seq(1,data_length))时,您要求R为您提供序列1NULL因此错误。

您可以按seq(1,NULL)

复制错误

取决于您的目标(您必须自行检查您的计划是否符合您的目的) 您可以添加条件,以便不会发生错误。

你可以改变 if (i == 1)if (i == 1 & !is.null(data_length))