2012-06-17 1 views
0

dlply() дает мне ошибку: «Object» ... «not found», когда я пытаюсь выполнить функцию smooth.spline(). Пример ниже создает некоторые данные и показывает, как «lm» будет работать, но «smooth.spline» не будет. Обратите внимание, что я выполняю некоторую арифметику в аргументах функции, но это не причина ошибки.r - dlply with smooth.spline

#some data: 
df <- data.frame(count=rep(1:5,2),VSS=runif(10,0.45,0.55), 
     TSS=runif(10,0.9,1.3),sl=c(rep("a",5),rep("b",5))) 
#works: 
dlply(df,.(sl),lm,formula=VSS/TSS~count) 
#doesn't work: 
dlply(df,.(sl),smooth.spline,x=count,y=VSS/TSS,all.knots=TRUE) 
#output: 
Error in xy.coords(x,y) : Object 'VSS' not found 

Любые идеи ???

ответ

1

Ugh, слишком запутанная оценка и окружающая среда, вероятно, являются проблемой. Я вообще не дерутся эти вещи, я просто работать вокруг них:

foo <- function(x,xvar,yvar,...){ 
    smooth.spline(x = x[,xvar],y = x[,yvar],...) 
} 
df$rat <- with(df,VSS/TSS) 
dlply(df,.(sl),foo,xvar = "count",yvar = "rat",all.knots = TRUE) 

Но может быть способ обмануть dlply в этом, я не знаю.

+0

Конечно. Ну, однострочный интерфейс был бы приятным для читаемости, и вызов не был бы более сложным, чем для lm(). Должна быть smooth.spline(), которая слишком сложна из-за перекрестной проверки и прочего. В любом случае, спасибо. – lambu0815