ошибка в приложении: аргументы должны иметь одинаковую длину

Я импортировал набор данных в R как фрейм данных из файла .csv. Первоначально у меня было следующее сообщение об ошибке:

> data<-read.csv("D:/research/PhD 2014/Data/anaesthesia trials/anaesthesia    times.csv", header=TRUE)
> str(data)
'data.frame':   80 obs. of  10 variables:
$ chemical: Factor w/ 2 levels "aquis","benzocaine": 1 1 1 1 1 1 1 1 1 1 ...
$ Fish    : int  1 2 3 4 5 6 7 8 9 10 ...
$ Dose    : int  10 10 10 10 10 10 10 10 10 10 ...
$ X1      : int  442 0 0 0 0 0 0 0 0 0 ...
$ X2      : int  600 0 0 0 0 0 0 0 0 0 ...
$ X3a     : int  885 0 0 0 0 0 0 0 0 0 ...
$ X3b     : int  0 0 0 0 0 0 0 0 0 0 ...
$ Recovery: int  650 0 0 0 0 0 0 0 0 0 ...
$ wt..g.  : num  0.19 0 0 0 0 0 0 0 0 0 ...
$ tl..mm. : int  35 0 0 0 0 0 0 0 0 0 ...
> Mean<-tapply(data$x1,data$Dose, mean)
 Error in tapply(data$x1, data$Dose, mean) : 
    arguments must have same length
> length(data$Dose)
 [1] 80
> length(data$x1)
 [1] 0
> dim(data$x1)
 NULL

Я подозреваю, что это потому, что отсутствуют значения. Однако пропущенные значения не являются пропущенными значениями как таковыми, это настоящие нули. Я искал ошибку и функцию 'tapply' здесь, на других форумах, и фактически скопировал код из «Руководства для начинающих по R» и заменил его моими собственными данными.

Другая моя проблема, которая более проблемна, чем отсутствие нулей, заключается в том, что длина x1 равна 0 в соответствии с функцией length () ...

Я очень озадачен, потому что я вернулся и проверил файл .csv, попытался сохранить его как другой файл .csv, и, похоже, ничего не изменилось. Я обязательно изменил форматирование ячеек на "число" в самом .csv, и это, похоже, не помогло. R по какой-то причине не распознает данные?

Я могу предоставить файл .csv с проблемой, но не знаю, как лучше это сделать.


person Daniel Svozil    schedule 04.06.2015    source источник


Ответы (3)


Вы должны использовать data$X1 (верхний регистр X) в tapply вызове. Имена в R чувствительны к регистру. Сообщите нам, сработало ли это.

person cyberj0g    schedule 04.06.2015

Попробуйте преобразовать ваши входные данные во фрейм данных (data.frame ()). Это разрешило аналогичную ошибку для меня.

person Martin Thøgersen    schedule 27.06.2017
comment
Это работает, когда вы применяете функцию tapply к объекту, не являющемуся data.frame, поэтому as.data.frame(yourdata) или setDF(yourdata) перед tapply будет более безопасным способом. - person Jason Goal; 18.04.2018

Функция tapply требует факторной переменной для группировки результатов. В вашем примере данные переменной INDEX $ Dose являются целыми числами.

Пытаться:

data[, Dose] <- as.factor(data[, Dose])
Mean <- tapply(data$X1, data$Dose, mean)
person Ronaldo Baltar    schedule 26.02.2020