API: R-package

May 10, 2023

Introduction to the Survey Solutions API R-package

Why this package

The World Bank’s Computer Assisted Survey System (CASS) Survey Solutions is a powerful tool for high quality data collection and used in many statistical offices around the world. Besides the standard GUI, it also comes with a powerful REST API. For details see https://docs.mysurvey.solutions/

To further facilitate its integration in a fully automated workflow we have developed this R package, which covers almost all of the available API calls. With this vignette you get a first overview on the different functions, further vignettes are available on survey management, paradata analysis and shiny integration.

The package can be considered as being a API “bare bone”, as it implements the basic Survey Solutions API calls without substantial modification. However, this is not true for the data export function as well as for the paradata. Modification was necessary to facilitate workflow integration. See the details in the corresponding documentation.

Please be aware, that this package makes heavy use of data.table, and this is also continued in this vignette. In case you are not familiar with it yet, you should probably have a look a this introduction.

API credentials

To use the API you first need to set-up the API user on your Survey Solutions server. See here for details. After this done, you can use the suso_set_key() function, to provide your credentials.

library(SurveySolutionsAPI)
suso_clear_keys()
suso_set_key("https://xxx.mysurvey.solutions", "xxxxxx", "xxxxxxx")
suso_keys()
#> $suso
#> $suso$susoServer
#> [1] "https://xxx.mysurvey.solutions"
#> 
#> $suso$susoUser
#> [1] "xxxxxx"
#> 
#> $suso$susoPass
#> [1] "xxxxxxx"
#> 
#> 
#> attr(,"class")
#> [1] "suso_api"

After this is done, there is no need to provide the credentials for every API call again. They are stored until the end of your current session. There is also a function to check if your credentials work.

suso_PwCheck()
#> [1] "https://michael-wild-demo.mysurvey.solutions/primary/api/v1/supervisors?limit=200"
#> Response [https://michael-wild-demo.mysurvey.solutions/primary/api/v1/supervisors?limit=200]
#>   Date: 2023-02-16 17:24
#>   Status: 200
#>   Content-Type: application/json; charset=utf-8
#>   Size: 482 B

In case no workspace is provided, this call (like all the other calls) will default to the primary workspace. However if a workspace is provided, then the check will be performed on the provided workspace.

suso_PwCheck(workspace = "test")
#> [1] "https://michael-wild-demo.mysurvey.solutions/test/api/v1/supervisors?limit=200"
#> Response [https://michael-wild-demo.mysurvey.solutions/test/api/v1/supervisors?limit=200]
#>   Date: 2023-02-16 17:24
#>   Status: 200
#>   Content-Type: application/json; charset=utf-8
#>   Size: 4.54 kB

It calls the supervisor API, and returns the response. If the return value is 200, then your connection and credentials are OK. For further information on API response status codes have a look here: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status.

Workspace Management

You can also manage your workspaces through the API. In particular, you can

  • request a list of all workspaces the API user has access to, as well as
  • create new workspaces
  • and assign users to a particular workspace.

However for the latter two operations you require ADMIN credentials. Standard API user credentials would not work.

To receive a list of workspaces to which the current API user has access to, you can just run:

ws <- suso_getWorkspace()
print(head(ws))
#>       Name       DisplayName DisabledAtUtc
#> 1: primary Default Workspace            NA
#> 2:    test              test            NA
#> 3:   test2             test2            NA

To receive a list of all workspaces in the system (even those to which the current API user does not have access to) you can do the same, and use the ADMIN password:

ws <- suso_getWorkspace(apiUser = adminUser, apiPass = adminPass)
#> Error in stopifnot(is.character(user), length(user) == 1): object 'adminUser' not found
print(head(ws))
#>       Name       DisplayName DisabledAtUtc
#> 1: primary Default Workspace            NA
#> 2:    test              test            NA
#> 3:   test2             test2            NA

For the next two operations, the use of admin credentials is mandatory, they will not work with a standard API user. The first one of these two is the creation of a new workspace:

ws <- suso_createWorkspace(apiUser = adminUser, apiPass = adminPass, your_workspace = "test", new_workspace = "test11", displayName = "ExtraExtraWorkspace")
#> Error in stopifnot(is.character(user), length(user) == 1): object 'adminUser' not found
print(head(ws))
#>       Name       DisplayName DisabledAtUtc
#> 1: primary Default Workspace            NA
#> 2:    test              test            NA
#> 3:   test2             test2            NA

The return value from the function already tells you, that the new workspace has been successfully created, however to double check, you can also get the full list again:

ws <- suso_getWorkspace(apiUser = adminUser, apiPass = adminPass)
#> Error in stopifnot(is.character(user), length(user) == 1): object 'adminUser' not found
print(head(ws))
#>       Name       DisplayName DisabledAtUtc
#> 1: primary Default Workspace            NA
#> 2:    test              test            NA
#> 3:   test2             test2            NA

Finally you can also assign a new user to this workspace by using the suso_assignWorkspace function.

ws <- suso_assignWorkspace(your_workspace = "test", assign_workspace = "test11", apiUser = adminUser, apiPass = adminPass, uid = "34c2bc7b-ec33-473b-875b-dc06d269fced", sv_id = "34c2bc7b-ec33-473b-875b-dc06d269fced")
#> Error in stopifnot(is.character(user), length(user) == 1): object 'adminUser' not found
print(head(ws))
#>       Name       DisplayName DisabledAtUtc
#> 1: primary Default Workspace            NA
#> 2:    test              test            NA
#> 3:   test2             test2            NA

Further details on workspaces can be found in the dedicated vignette on user management.

User Management

These functions are particularly useful for survey management, and more details can be found in the corresponding vignette on survey management. Lets start with getting a list of all supervisors on the server.

sv <- suso_getSV(workspace = "test")
print(head(sv))
#>    IsLocked        CreationDate                               UserId   UserName
#> 1:    FALSE 2023-02-07 17:33:40 00d21677-0331-4698-ae7b-908aeac14dd6 somesvuser
#> 2:    FALSE 2023-02-04 19:05:10 ded27a4a-716d-4bf2-8d54-aedc31fc164b     SV0001
#> 3:    FALSE 2023-02-04 19:36:03 5753ddde-3c7d-438f-9934-43fdf18fa802     SV0002
#> 4:    FALSE 2023-02-04 19:36:03 72196c84-8f2f-488a-8d61-f23b8b998d43     SV0003
#> 5:    FALSE 2023-02-04 19:36:03 1a9d4b10-c92d-401d-af69-2a7d0a391fe6     SV0004
#> 6:    FALSE 2023-02-04 19:36:03 97e9e4ff-22e1-492f-a102-03c2115903e7     SV0005

Your will receive a list of supervisors currently active (not archived) on the server. If you take one of the supervisor’s id and use the suso_getINT function, you will receive all the interviewers in the team.

int <- suso_getINT(sv_id = sv[3, UserId], workspace = "test")
print(int)
#>    IsLocked        CreationDate                               UserId UserName
#> 1:    FALSE 2023-02-04 19:36:03 14ee97f1-ae8d-44f5-8a30-4c3617f03002  INT0012
#> 2:    FALSE 2023-02-04 19:36:03 4a1d5b37-2db1-448c-adc2-0a26379956fe  INT0013

To receive more information about a particular user, use the suso_getINT_info function:

intinfo <- suso_getINT_info(int_id = int[1, UserId], workspace = "test")
print(intinfo)
#>    SupervisorName                         SupervisorId IsLockedBySupervisor IsLockedByHeadquarters IsArchived                               UserId UserName        Role IsLocked
#> 1:         SV0002 5753ddde-3c7d-438f-9934-43fdf18fa802                FALSE                  FALSE      FALSE 14ee97f1-ae8d-44f5-8a30-4c3617f03002  INT0012 Interviewer    FALSE
#>           CreationDate      FullName
#> 1: 2023-02-04 19:36:03 Ashlie Spinka

To get information about any particular user, you can also use the more general function suso_getUSR.

usrinfo_int <- suso_getUSR(uid = sv[3, UserId], workspace = "test")
print(usrinfo_int)
#>    IsArchived                               UserId UserName       Role IsLocked        CreationDate       FullName
#> 1:      FALSE 5753ddde-3c7d-438f-9934-43fdf18fa802   SV0002 Supervisor    FALSE 2023-02-04 19:36:03 Isidro Dach II

usrinfo_int <- suso_getUSR(uid = int[1, UserId], workspace = "test")
print(usrinfo_int)
#>    IsArchived                               UserId UserName        Role IsLocked        CreationDate      FullName
#> 1:      FALSE 14ee97f1-ae8d-44f5-8a30-4c3617f03002  INT0012 Interviewer    FALSE 2023-02-04 19:36:03 Ashlie Spinka

Questionnaire

The basic questionnaire API calls are handled through the suso_getQuestDetails function.

If no input is provided, the function returns a list of all questionnaires on the server:

questlist <- suso_getQuestDetails(workspace = "test")
# print(questlist)

Specifying operation.type = status, you receive a list of statuses.

statlist <- suso_getQuestDetails(operation.type = "statuses", workspace = "test")
print(statlist)
#>  [1] "Restored"               "Created"                "SupervisorAssigned"     "InterviewerAssigned"    "RejectedBySupervisor"   "ReadyForInterview"      "SentToCapi"            
#>  [8] "Restarted"              "Completed"              "ApprovedBySupervisor"   "RejectedByHeadquarters" "ApprovedByHeadquarters" "Deleted"

By taking a particular QuestionnaireId and specifying the *operation.type *you can execute further requests. For example,

questionnaire <- suso_getQuestDetails(operation.type = "structure", workspace = "test", quid = questlist[1, QuestionnaireId], version = questlist[1, Version])
questionnaire <- questionnaire[, .(VariableName, type, QuestionText, Featured, PublicKey)]
#> Error in .(VariableName, type, QuestionText, Featured, PublicKey): could not find function "."
questionnaire <- questionnaire[!is.na(QuestionText)]
#> Error in eval(expr, envir, enclos): object 'QuestionText' not found
head(questionnaire$q, 19L)
#>                                   Id               LastEntryDate L0                  type                            PublicKey                  Title L1    VariableName QuestionScope
#>  1: dee7705fd6114b129b972b8e5b80c4ea 2022-07-15T17:56:56.4811273  1                 Group c46ee895-0e6e-4063-8136-31e6bfa7c3f8                  COVER NA            <NA>            NA
#>  2: dee7705fd6114b129b972b8e5b80c4ea 2022-07-15T17:56:56.4811273  2                 Group fdeaf889-ba80-89c5-6d60-8c1b1196ebe5               DWELLING NA            <NA>            NA
#>  3: dee7705fd6114b129b972b8e5b80c4ea 2022-07-15T17:56:56.4811273  3                 Group 1f949736-beb1-dd10-6451-561b7799c99c RESULTS AND CONCLUSION NA            <NA>            NA
#>  4:                             <NA>                        <NA>  1          TextQuestion 59e2b882-0b67-78cf-d08a-0760e98d5157                   <NA>  1             q01             0
#>  5:                             <NA>                        <NA>  1          TextQuestion 95c9e53e-6603-a96e-0dee-ce0584076a16                   <NA>  2             q02             0
#>  6:                             <NA>                        <NA>  1          TextQuestion 4af6c880-658a-b610-53fc-4a2bdd5cfe2c                   <NA>  3             q03             0
#>  7:                             <NA>                        <NA>  1          TextQuestion 0dd2cbb5-1617-fb3b-1494-394ec4aceb4c                   <NA>  4             q04             0
#>  8:                             <NA>                        <NA>  1          TextQuestion 4c20c6f7-ff1b-8884-3b7b-cb7c42f23396                   <NA>  5             q05             0
#>  9:                             <NA>                        <NA>  1        SingleQuestion 3870444e-932a-676b-c109-7cb8b22e1520                   <NA>  6             q06             0
#> 10:                             <NA>                        <NA>  1          TextQuestion 1f328d26-2264-f86a-bd62-9d69ed0e6010                   <NA>  7             q07             0
#> 11:                             <NA>                        <NA>  1          TextQuestion 426d51a2-4ecb-9256-4074-2d711a8ff273                   <NA>  8             q08             0
#> 12:                             <NA>                        <NA>  1          TextQuestion 60068eee-c5c6-738c-235d-d0d540bebf8a                   <NA>  9             q09             0
#> 13:                             <NA>                        <NA>  1 GpsCoordinateQuestion 09024983-6bc6-9ad7-bdc7-cdb6864d1292                   <NA> 10             q10             0
#> 14:                             <NA>                        <NA>  2            StaticText 4d34d956-8a7a-eb0b-a0e8-00a9648a6cc0                   <NA>  1                            NA
#> 15:                             <NA>                        <NA>  2       NumericQuestion 1d4e607d-50fb-4d3e-20c6-b4a35a3f5bc8                   <NA>  2      northBound             3
#> 16:                             <NA>                        <NA>  2       NumericQuestion 256085f2-2725-e8d2-2475-14e4a9c6cc62                   <NA>  3      southBound             3
#> 17:                             <NA>                        <NA>  2       NumericQuestion 2ca4ef6b-46db-6f89-0527-98fb5605c6d3                   <NA>  4       eastBound             3
#> 18:                             <NA>                        <NA>  2       NumericQuestion 0df2ac09-c7d2-e1d6-3b5c-0beadf69e218                   <NA>  5       westBound             3
#> 19:                             <NA>                        <NA>  2       NumericQuestion fbbaad6d-c38e-8bf1-56e9-f325ff37d6ae                   <NA>  6 subCellsDivisor             3
#>                                          QuestionText Featured L2     ..JSON  intID
#>  1:                                              <NA>       NA NA <list[16]> 01NANA
#>  2:                                              <NA>       NA NA <list[16]> 02NANA
#>  3:                                              <NA>       NA NA <list[16]> 03NANA
#>  4:                                       *1.Province     TRUE NA <list[17]> 0101NA
#>  5:                                *2. Territory/City     TRUE NA <list[17]> 0102NA
#>  6:                                   *3. Health zone     TRUE NA <list[17]> 0103NA
#>  7:                                    4. Health area     TRUE NA <list[17]> 0104NA
#>  8:                              *5. Grid cell number     TRUE NA <list[18]> 0105NA
#>  9:                                6. Sub cell number     TRUE NA <list[19]> 0106NA
#> 10: 7. Urban commune/ Rural commune/ Sector/ Chiefdom     TRUE NA <list[17]> 0107NA
#> 11:                                       8. Grouping     TRUE NA <list[17]> 0108NA
#> 12:                                9. Village/Quarter     TRUE NA <list[17]> 0109NA
#> 13:             *10. GPS Coordinates of the Grid Cell     TRUE NA <list[17]> 0110NA
#> 14:                                              <NA>       NA NA  <list[9]> 0201NA
#> 15:                                 *~ North boundary    FALSE NA <list[20]> 0202NA
#> 16:                                 *~ South boundary    FALSE NA <list[20]> 0203NA
#> 17:                                  *~ East boundary    FALSE NA <list[20]> 0204NA
#> 18:                                  *~ West boundary    FALSE NA <list[20]> 0205NA
#> 19:                               *~ Sub-cell divider    FALSE NA <list[19]> 0206NA

Gives you a data.table which contains all the questions, question texts, etc. which you can use for further processing i.e to render a user manual with rmarkdown. Find details in the manual on questionnaire creation.

You can also get a list of all interviews done for the specific questionnaire.

interviews <- suso_getQuestDetails(operation.type = "interviews", workspace = "test", quid = questlist[1, QuestionnaireId], version = questlist[1, Version])
interviews <- interviews[, .(InterviewId, AssignmentId, ResponsibleId, ErrorsCount, Status)]
head(interviews, 20L)
#>                              InterviewId AssignmentId                        ResponsibleId ErrorsCount               Status
#>  1: 7d91c038-e258-4948-a7a2-566cda5b4dc5            1 3b0c6e09-d606-4914-9e20-2abc048d5bea           0 ApprovedBySupervisor
#>  2: 343da912-5a9f-4875-821b-6f0e1440150b           48 a67d2b82-bf28-40cf-bd1a-7901225c0885           0 RejectedBySupervisor
#>  3: a9620548-b1d8-418c-9c1f-a0d64031968a          234 3b0c6e09-d606-4914-9e20-2abc048d5bea           0 RejectedBySupervisor
#>  4: 79202304-8ba6-4c87-b45a-3f56529fc6e4          235 366cb1f7-30fa-48bf-9b56-ffa4ec8b0861           0 RejectedBySupervisor
#>  5: 7d04a07e-5c99-44f6-974f-531d8ed5a560          239 366cb1f7-30fa-48bf-9b56-ffa4ec8b0861           0  InterviewerAssigned
#>  6: ea10292e-7ac6-4fa3-bf82-d4d24fee98ba            1 a67d2b82-bf28-40cf-bd1a-7901225c0885           0            Completed
#>  7: 1d9305db-2be3-44d6-baf2-cf560a9ff45d            1 a67d2b82-bf28-40cf-bd1a-7901225c0885           0            Completed
#>  8: 782d1652-c6f5-4d02-882e-e372e97dfa83            1 a67d2b82-bf28-40cf-bd1a-7901225c0885           0            Completed
#>  9: 8621b894-43bd-4e4e-bfa3-0e67cdf5abb8            1 a67d2b82-bf28-40cf-bd1a-7901225c0885           0            Completed
#> 10: beeb70f4-ea94-4eb7-af5c-bc15abcfa9ed            1 a67d2b82-bf28-40cf-bd1a-7901225c0885           0            Completed
#> 11: 90badf8a-199a-4247-94a9-51a14bf308fa            1 a67d2b82-bf28-40cf-bd1a-7901225c0885           1            Completed
#> 12: d63ced87-589b-4316-8e8f-e247c4779877            1 a67d2b82-bf28-40cf-bd1a-7901225c0885           1            Completed
#> 13: 43045bd2-325c-4649-81b3-4f1841048034            1 a67d2b82-bf28-40cf-bd1a-7901225c0885           1            Completed
#> 14: 1054b136-c94f-4851-b8c2-ca4e003f4358            1 a67d2b82-bf28-40cf-bd1a-7901225c0885           1            Completed
#> 15: a43b0480-8fdb-4d43-b6fe-29420bf8eb71            1 a67d2b82-bf28-40cf-bd1a-7901225c0885           0            Completed
#> 16: 2f829f02-c844-439b-88a2-326b98412204            1 a67d2b82-bf28-40cf-bd1a-7901225c0885           1            Completed
#> 17: 0dc4f8a1-d740-440f-bdc6-2e34df997d00            1 a67d2b82-bf28-40cf-bd1a-7901225c0885           1            Completed
#> 18: ccc03ee9-1974-4356-98f0-648e0395e932            1 a67d2b82-bf28-40cf-bd1a-7901225c0885           1            Completed
#> 19: a02bd8fa-e048-43f2-88ad-f5e43c2cc67b            1 a67d2b82-bf28-40cf-bd1a-7901225c0885           1            Completed
#> 20: 605afedd-19e6-4941-b51c-b12d885274eb            1 a67d2b82-bf28-40cf-bd1a-7901225c0885           1            Completed

Quick statistics –> Attention: this call is currently returning a 500 error, the Survey Solutions team is working on it.

To monitor variables of interest, you can use the suso_get_stats function.

# statquest<-suso_get_stats(questID = questlist[1, QuestionnaireId], workspace = 'test', version = questlist[1, Version], qQuest = questionnaire[19, PublicKey]) print(statquest)

Full data export

To export the data collected in Survey Solutions, you use suso_export.

#> The last file has been created 0.06833 hours ago.
#> FileName: assignment__actions 
#> Nesting Level: 0 
#> ****
#> 
#> FileName: households 
#> Nesting Level: 1 
#> ****
#> 
#> FileName: interview__actions 
#> Nesting Level: 0 
#> ****
#> 
#> FileName: interview__diagnostics 
#> Nesting Level: 0 
#> ****
#> 
#> FileName: interview__errors 
#> Nesting Level: 0 
#> ****

Its return value is a list with the following elememts: main, R1, R2, R3, with

  • main containing the files: interview__comments, kasai_listing1
  • R1 containing all rosters at the first level
  • R2 containing all rosters at the second level
  • R3 containing all rosters at the third level

through the harmonized ID, main and rosterfiles can easily be put together. More on this in the specific vignette.

Paradata

To retrieve the paradata for a particular interview you use suso_export_paradata

system.time(para1 <- suso_export_paradata(questID = questlist[1, QuestionnaireId], workspace = "test", version = questlist[1, Version], reloadTimeDiff = 24, onlyActiveEvents = F, allResponses = T))
#> 
#> The last file has been created 1 hours ago.
#> 
#> Starting download & file extraction. 
#> 
#> 
#> Calculating Response Timings.
#> 
#> Extracting GPS variable.
#> Processing: 
#> 	AnswerSet
#> 
#> 	AnswerRemoved
#> 
#> 	ApproveByHeadquarter
#> 
#> 	Restarted
#> 
#> 	Reject
#> 
#> 	QuestionDeclaredInvalid
#> 
#> 	QuestionDeclaredValid
#> 
#> Export & Transformation finished.
#>    user  system elapsed 
#>   0.536   0.036   0.820

This will return a list of data.tables, separated by events. Please bear in mind, that paradata files can be fairly big, and processing it may require a large working memory. To decrease the load there are also 3 parameters you can change, these are:

  • onlyActiveEvents, if TRUE it processes only the active events initiated by users.
  • allResponses, if FALSE, does not process all response values, nevertheless they are still included in a single column. Otherwise, they are separated by column.

Running the same call again without passive events and without all responses processed, reduces processing time significantly.

system.time(para2 <- suso_export_paradata(questID = questlist[1, QuestionnaireId], workspace = "test", version = questlist[1, Version], reloadTimeDiff = 24, onlyActiveEvents = T, allResponses = F))
#> 
#> The last file has been created 1 hours ago.
#> 
#> Starting download & file extraction. 
#> 
#> 
#> Calculating Response Timings.
#> 
#> Extracting GPS variable.
#> Processing: 
#> 	AnswerSet
#> 
#> 	AnswerRemoved
#> 
#> 	ApproveByHeadquarter
#> 
#> 	Restarted
#> 
#> 	Reject
#> 
#> Export & Transformation finished.
#>    user  system elapsed 
#>   0.524   0.028   0.818

As you see from the system timings, changing these parameters reduces processing time significantly. More details on how to work with paradata can be found in the corresponding vignette. The paradata export is returned as a list, with the following elements:

  • full data: KeyAssigned, Completed, AnswerSet, AnswerRemoved, Restarted, Reject, QuestionDeclaredInvalid, QuestionDeclaredValid, actionDistr, userDistr, roleDistr
  • reduced data: KeyAssigned, Completed, AnswerSet, AnswerRemoved, Restarted, Reject, actionDistr, userDistr, roleDistr

There are also tables already included in the file, like:

para2[["userDistr"]]
#>    responsible count
#> 1:               918
#> 2:        int1   804

which gives the distribution of events by user, or:

para2[["actionDistr"]]
#>                      action count
#>  1:   QuestionDeclaredValid   747
#>  2:               AnswerSet   646
#>  3:             VariableSet   129
#>  4:                 Resumed    25
#>  5:                  Paused    25
#>  6:     TranslationSwitched    23
#>  7:             KeyAssigned    17
#>  8:        InterviewCreated    17
#>  9:      SupervisorAssigned    17
#> 10:    InterviewModeChanged    17
#> 11:     InterviewerAssigned    17
#> 12:               Completed    17
#> 13:    ReceivedBySupervisor    16
#> 14: QuestionDeclaredInvalid     9

which gives the distribution by event type.

Map management

Since recently, it is now also possible, to handle maps through the API. This is implemented through the lately introduced GraphQL API.

To upload a map, you can just use the suso_mapupload function like this:

suso_mapupload(workspace = "test", path_to_zip = mapPath)
#>    xMaxVal yMaxVal xMinVal yMinVal wkid             fileName  size maxScale minScale shapeType       importDateUtc                           uploadedBy     users
#> 1:  -78.39    26.8  -78.62   26.55 4326 checkshapesimple.shp 20467        0        0   Polygon 2023-02-16 17:24:47 961d073f-f316-4353-9e7e-1f00899cb837 <list[0]>

To assign a map you can use the suso_mapassign function:

suso_mapassign(workspace = "test", fileName = "checkshapesimple.shp", userName = "INT0004")
#>                fileName    user shapeType       importDateUtc
#> 1: checkshapesimple.shp INT0004   Polygon 2023-02-16 17:24:47

And to check the current maps on the server, and to whom they are assigned, you can use:

suso_mapinfo(workspace = "test")
#>                  fileName maxScale minScale shapeType shapesCount    size       importDateUtc                           uploadedBy userName   xMaxVal     yMaxVal   xMinVal
#> 1: seg_Lat14701Lon379.shp        0        0   Polygon           4    1558 2023-01-26 16:07:54 25628149-1164-4405-b2a2-41a114700215  INT0004 171407.96 5229062.505 171313.10
#> 2: seg_Lat14701Lon379.shp        0        0   Polygon           4    1558 2023-01-26 16:07:54 25628149-1164-4405-b2a2-41a114700215  INT0005 171407.96 5229062.505 171313.10
#> 3: seg_Lat14703Lon375.shp        0        0   Polygon           4    1558 2023-01-26 16:07:55 25628149-1164-4405-b2a2-41a114700215     <NA> 165982.27 5231732.606 165887.31
#> 4: seg_Lat14706Lon376.shp        0        0   Polygon           4    1558 2023-01-26 16:07:55 25628149-1164-4405-b2a2-41a114700215     <NA> 166739.20 5236147.192 166644.21
#> 5:   checkshapesimple.shp        0        0   Polygon           1   20467 2023-02-16 17:24:47 961d073f-f316-4353-9e7e-1f00899cb837  INT0004    -78.39      26.798    -78.62
#> 6:  Lat9260Lon650_ALL.tif        0        0      <NA>          NA 8658427 2023-02-15 22:16:05 25628149-1164-4405-b2a2-41a114700215     <NA>     22.37      -6.681     22.36
#> 7:  Lat9263Lon605_ALL.tif        0        0      <NA>          NA 8643131 2023-02-15 22:16:06 25628149-1164-4405-b2a2-41a114700215     <NA>     21.96      -6.654     21.95
#> 8:  Lat9263Lon686_ALL.tif        0        0      <NA>          NA 8663511 2023-02-15 22:16:07 25628149-1164-4405-b2a2-41a114700215     <NA>     22.69      -6.652     22.68
#> 9:  Lat9264Lon625_ALL.tif        0        0      <NA>          NA 2165023 2023-02-15 22:16:07 25628149-1164-4405-b2a2-41a114700215     <NA>     22.14      -6.645     22.13
#>        yMinVal wkid
#> 1: 5228935.260 4326
#> 2: 5228935.260 4326
#> 3: 5231605.274 4326
#> 4: 5236019.808 4326
#> 5:      26.546 4326
#> 6:      -6.690 4326
#> 7:      -6.663 4326
#> 8:      -6.662 4326
#> 9:      -6.654 4326

We hope that gave you a short overview on the available functions. For more details on how to use the output, please read the specific vignettes.