I've written code that runs perfectly in R Studio (3.4.3). I copied the code over into a Spotfire project (TERR) and it ran fine once or twice, but now bombs with the "Invalid subscript type 'list'" error. I have identified it coming from the line below in the apply
function.
minGT <- as.numeric(rownames(resultGT)[apply(resultGT , 2, which.min)])
I've spent several days trying potential solutions found on SO and other places to no avail. Below is some of the code block, reduced for perusing:
###Code revised previously after SO (@Parfait) assistance - different problem##
library(plyr)
DS <- DirectionalSurveys[, c("IDWELL", "API", "WELL NAME", "DIVISON", "MD", "INCL", "AZIM", "NS", "EW", "TVD", "DLS", "Northing", "Easting")]
Perf <- Perforation[, c("IDWELL", "Well API Number", "Well Name", "County", "Mid Perf MD", "Mid Perf TVD")]
colnames(DS) <- c("IDWELL", "API", "WellName", "Division", "MD", "INCL", "AZIM", "NS", "EW", "TVD", "DLS", "Northing", "Easting")
colnames(Perf) <- c("IDWELL", "API", "WellName", "County", "MidPerfMD", "MidPerfTVD")
df_lists <- lapply(seq_along(WellName), function(i) {
S <- DS$MD[DS$WellName == WellName[i]]
P <- Perf$MidPerfMD[Perf$WellName == WellName[i]]
resultGT <- outer(S, P, '>=')
resultGT[resultGT == FALSE] <- 50
rownames(resultGT) <- paste0(S)
colnames(resultGT) <- paste0(P)
#This is the line that throws the error - specifically the `apply` function
minGT <- as.numeric(rownames(resultGT))[apply(resultGT , 2, which.min)]
#Calculations begin below after some additional subsetting (not shown)
deep <- S[match(minGT, S)]
shallow <- S[match(minGT, S) - 1]
#............etc.
#Remainder of code removed to prevent recipient boredom....
I'd really appreciate some (more) help - @Parfait has already helped me get the entire code running previously, so thanks in advance for any additional assistance. I can provide a data set and full coding as necessary.
Here is the error message in its entirety: Error message generated
I was able to obtain a solution to my problem with the help of DougJ at the Tibco Community website. Below is a test set that DougJ performed to identify the source of the problem was from the
data.frame(P)
which contained empty cells - note thatdata.frame(P)
consists of roughly 120 rows per iteration whiledata.frame(S)
has over 300 rows per iteration. My solution to the difference in dataframe sizes was the statementresultGT <- outer(S, P, ">=")
with a subsequent statementminGT <- rownames(resultGT)[apply(resultGT, 2, which.min)]
to find minimum values of "S" for each individual value of "P". This worked flawlessly in RStudio, but threw the error in Spotfire with TERR.Below is the final code that was developed by DougJ as the solution:
Now works in Spotfire with TERR. Thanks to DougJ if you're on SO!