我正在一个函子中运行一个for循环,该函子循环一组变量,从某些数据帧中获取与该变量关联的系数。然后在主数据框中,根据行的ID和列的变量名进行过滤以找到正确的行和列,并将系数添加到该单元格的值中。
for (k in 1:length(var.names)){
var<-var.names[k] ## selects variable
value.add<-coeff.proj.filter[coeff.proj.filter$Variable==var,2] # filter my
# coefficent dataframe
df2[df2$ID==id,var]<- # find the cell to replace
df2[df2$ID==id,var]+value.add # take cell value
# and add value
)}
当我手动浏览该功能时,一切正常。我已经做了很多手动检查。但是我不知道问题出在哪里。
我运行funciotn时收到的错误是:
x [[jj]] [iseq]中的错误<-vjj:替换长度为零 来自:
[<-.data.frame
(*tmp*
,proj.data2 $ Player_ID == id,var,value = numeric(0))
这使我认为'var'向量有问题或for循环执行了多少次?
我的功能:
## Reproducable Code
## Variable<-c('var1','var2','var3')
## var.list<-Variable
## values<-c(10,20,30)
## coeff.proj<-data.frame(Variable,values)
## ID<-c('A','B','C','D')
## var1<-c(1,2,3,4)
## var2<-c(11,12,13,14)
## var3<-c(21,22,23,24)
## df<-data.frame(ID,var1,var2,var3)
## id<-'A'
func1<-
function(df,var.list,id,coeff.proj){
df2<-df
coeff.proj.filter<-coeff.proj[coeff.proj$Variable %in% var.list,]
var.names<-coeff.proj.filter$Variable
## let var.names<-c('var1','var2','var3') for dummy coding
## var.names is character vector of length 12
## For Loop copied from above
for (k in 1:length(var.names)){
var<-var.names[k] ## selects variable
value.add<-coeff.proj.filter[coeff.proj.filter$Variable==var,2] # filter my
# coefficent dataframe
df2[df2$ID==id,var]<- # find the cell to replace
df2[df2$ID==id,var]+value.add # take cell value
# and add value
)}
## return(df2)
}
唯一的区别应该是ID=='A'
,第1行现在显示11,31和51。即使在此行中,我也无法创建可复制的示例,因为我的数据太大而无法在此处显示。寻求有关如何发生错误或是否有更好方法的提示。