Вот суть того, что я хочу сделать:R Ошибка: Неправильная длина вектора, должна быть 2
У меня есть 2 кадр данных:
х (идентификатор уникален)
id timestamp
282462839 2012-12-05 10:55:00
282462992 2012-12-05 12:08:00
282462740 2012-12-05 12:13:00
282462999 2012-12-05 12:48:00
у (идентификатор не является уникальным)
id value1 value2
282462839 300 100
282462839 300 200
282462839 400 300
282462999 500 400
282462999 300 150
у меня также есть функция MyFunc (идентификатор, p-значение), которая вычисляет что-то и возвращает одно из значений value2 в зависимости от p-значения и других value1s (более сложного, чем just pvalue == value1)
Я хочу создать третий столбец для x, который содержит соответствующий вычисленный myfunc (id, pvalue), где pvalue является целым числом, которое является постоянным (скажем, 20).
так, в сущности, я хочу сделать это:
x$t20 <- myfunc(x$id,20)
Я попытался с помощью lappy и sapply таким образом:
x$t20 <- sapply(as.vector(x$id),myfunc,pvalue=20)
Я попытался с помощью lapply и без as.vector, а также, но я постоянно получаю эту ошибку:
Error in .pointsToMatrix(p2) : Wrong length for a vector, should be 2
это работает, когда я просто дать имею в виду, где он просто дублирует $ ID в $ t20.
Как это сделать?
EDIT 1: Вот скелет MyFunc:
myfunc <- function(xid,pvalue) {
result <- subset(y,id==xid)
retVal <- -1
if(nrow(result) < 12){
return(NaN)
}
for(i in (1:nrow(result))){
#code to process result
}
return(retVal)
}
Если ваша функция 'myfunc' векторизована' x $ t20 <- myfunc (x $ id, 20) 'должна возвращать то, что вы хотите. – DrDom
Если это так, это дает мне ошибку: Ошибка в .pointsToMatrix (p2): Неверная длина для вектора должна быть 2 . Кроме того: Предупреждающее сообщение: В id == xid: длина длинного объекта не является кратное короткой длине объекта. мое фактическое определение MyFunc (XID, p-значение) Существует линия, где я делаю: результат <- подмножество (у, идентификатор == XID) Я попытался изменить его Xid [1], но это все-таки дал длина вектора должна быть 2 ошибки – orderof1
Кажется, что проблема в функции, пожалуйста, отредактируйте сообщение и добавьте код 'myfunc'. – DrDom