Я работал с spotfire и понял, что мои python-коды редактируют свойства столбца намного быстрее, чем r-коды. Код r занимает около 24 секунд, а код python - около 4, чтобы сделать то же самое. Мой код r просто плохо написан, чтобы это произошло.
Вот пример моего кода на python:
start=time.time()
count=0
names=[]
for i in olddt.Columns: #getting columns from old data table
names.append(i)
for i in dt.Columns: #assigning new values
if count<=4:
i.Properties["Limits.Whatif.Upper"]=1.0
i.Properties["Limits.Whatif.Lower"]=1.0
i.Properties["Limits.Prod.Upper"]=1.0
i.Properties["Limits.Prod.Lower"]=1.0
count=count+1
else:
i.Properties["Limits.Whatif.Upper"]=float(count-4)+26.0
i.Properties["Limits.Whatif.Lower"]=float(count-4)-39.0
i.Properties["Limits.Prod.Upper"]=names[count-4].Properties["Limits.Whatif.Upper"]+5.0
i.Properties["Limits.Prod.Lower"]=names[count-4].Properties["Limits.Whatif.Lower"]-4.0
count=count+1
print time.time()-start
Вот мой код R:
for(col in 1:ncol(temp2)){
if (col<=4){
attributes(temp2[,col])$SpotfireColumnMetaData$upper=Inf
attributes(temp2[,col])$SpotfireColumnMetaData$lower=-1*Inf
attributes(temp2[,col])$SpotfireColumnMetaData$upper2=Inf
attributes(temp2[,col])$SpotfireColumnMetaData$lower2=-1*Inf
}
else{
names(attributes(dt[,col-4])$SpotfireColumnMetaData)<- lapply( names( attributes(dt[ ,col-4] )$SpotfireColumnMetaData), tolower)
attributes(temp2[,col])$SpotfireColumnMetaData$upper=2
attributes(temp2[,col])$SpotfireColumnMetaDatalower=1
attributes(temp2[,col])$SpotfireColumnMetaData$upper2=attributes(dt[,col-4])$SpotfireColumnMetaData$upper
attributes(temp2[,col])$SpotfireColumnMetaData$lower2=attributes(dt[,col-4])$SpotfireColumnMetaData$lower
}
}
Я также использовал функцию lapply, показанную здесь:
applyLimits <- function(col){
if (count<4){
attributes(temp2[,col])$SpotfireColumnMetaData$upper<<-Inf
attributes(temp2[,col])$SpotfireColumnMetaData$lower<<- (-1*Inf)
attributes(temp2[,col])$SpotfireColumnMetaData$upper2<<-Inf
attributes(temp2[,col])$SpotfireColumnMetaData$lower2<<- (-1*Inf)
count<<-count+1
}
else{
attributes(temp2[,col])$SpotfireColumnMetaData$upper<<-2
attributes(temp2[,col])$SpotfireColumnMetaData$lower<<-1
attributes(temp2[,col])$SpotfireColumnMetaData$upper2<<-attributes(dt[,col-4])$SpotfireColumnMetaData$upper2
attributes(temp2[,col])$SpotfireColumnMetaData$lower2<<-attributes(dt[,col-4])$SpotfireColumnMetaData$lower2
count<<-count+1
}
}
lapply(1:ncol(temp),applyLimits)
Если есть какой-то способ улучшить мой код r, пожалуйста, сообщите мне, но я не видел лучшего способа настроить его свойства. Согласно некоторым исследованиям, я сделал temp2 и dt оба должны быть data.frame