我正在分析某些物质随时间的降解情况。脚本的目标是在应用之后的某个时间获得包含观察方差的列表(" Dag"变量)。
下面脚本的输出是一个包含NULL值的列表。我认为问题在于我将变量aux1赋值给列表项,但是当我通过命令行执行时,该行有效。
可能有更快的计算方法;即使在2个月后,我仍然感到不知所措。
mydata1<-as.data.frame(matrix(rnorm(600),ncol=6))
names(mydata1)=c("a","b","c","d","e","f")
substance1<-names(mydata1)
times1<-as.data.frame(rep(seq_len(10),10),ncol=1)
names(times1)<-"Dag"
times2<-unique(times1)
mydata1<-cbind(times1,mydata1)
vartijd<-function(times,mydata,substance){
varlist<<-vector("list",length(substance))
for (j in 1:length(substance))
aux<-sapply(times,function(i)var(mydata[mydata$Dag==i,substance[j]],na.rm=TRUE))
aux1<-cbind(times,aux)
varlist[[j]]<-aux1
}
vartijd(times2,mydata1,substance1)
答案 0 :(得分:1)
对代码进行基本修复,这样可以正常工作。
vartijd<-function(times,mydata,substance){
varlist<-vector("list",length(substance)) # local `<-` assignment
for (j in 1:length(substance)){ # opening bracket
aux<-sapply(times,function(i)var(mydata[mydata$Dag==i,substance[j]],na.rm=TRUE))
aux1<-cbind(times,aux)
varlist[[j]]<-aux1
} # closing bracket
return(varlist) # explicit return
}
结果:
> out <- vartijd(times2,mydata1,substance1)
> str(out)
List of 6
$ :'data.frame': 10 obs. of 2 variables:
..$ Dag: int [1:10] 1 2 3 4 5 6 7 8 9 10
..$ aux: num [1:10] 0.997 0.997 0.997 0.997 0.997 ...
$ :'data.frame': 10 obs. of 2 variables:
..$ Dag: int [1:10] 1 2 3 4 5 6 7 8 9 10
..$ aux: num [1:10] 0.891 0.891 0.891 0.891 0.891 ...
$ :'data.frame': 10 obs. of 2 variables:
..$ Dag: int [1:10] 1 2 3 4 5 6 7 8 9 10
..$ aux: num [1:10] 1.08 1.08 1.08 1.08 1.08 ...
$ :'data.frame': 10 obs. of 2 variables:
..$ Dag: int [1:10] 1 2 3 4 5 6 7 8 9 10
..$ aux: num [1:10] 0.927 0.927 0.927 0.927 0.927 ...
$ :'data.frame': 10 obs. of 2 variables:
..$ Dag: int [1:10] 1 2 3 4 5 6 7 8 9 10
..$ aux: num [1:10] 0.86 0.86 0.86 0.86 0.86 ...
$ :'data.frame': 10 obs. of 2 variables:
..$ Dag: int [1:10] 1 2 3 4 5 6 7 8 9 10
..$ aux: num [1:10] 0.874 0.874 0.874 0.874 0.874 ...