Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

sasquatch: Use SAS, R, and Quarto together #673

Open
11 of 29 tasks
ryanzomorrodi opened this issue Nov 18, 2024 · 3 comments
Open
11 of 29 tasks

sasquatch: Use SAS, R, and Quarto together #673

ryanzomorrodi opened this issue Nov 18, 2024 · 3 comments

Comments

@ryanzomorrodi
Copy link

ryanzomorrodi commented Nov 18, 2024

Submitting Author Name: Ryan Zomorrodi
Submitting Author Github Handle: @ryanzomorrodi
Other Package Authors Github handles: (comma separated, delete if none)
Repository: https://github.com/ryanzomorrodi/sasquatch
Version submitted: 0.0.0.9004
Submission type: Standard
Editor: TBD
Reviewers: TBD

Archive: TBD
Version accepted: TBD
Language: en


  • Paste the full DESCRIPTION file inside a code block below:
Package: sasquatch
Title: Use 'SAS', R, and 'quarto' Together
Version: 0.0.0.9004
Authors@R: 
    person("Ryan", "Zomorrodi", , "[email protected]", role = c("aut", "cre", "cph"),
           comment = c(ORCID = "0009-0003-6417-5985"))
Description: Use R and 'SAS' within reproducible multilingual 'quarto' 
    documents. Run 'SAS' code blocks interactively, send data back and forth
    between 'SAS' and R, and render 'SAS' output within quarto documents. 'SAS'
    connections are established through a combination of 'SASPy' and 
    'reticulate'.
License: MIT + file LICENSE
Encoding: UTF-8
Roxygen: list(markdown = TRUE)
RoxygenNote: 7.3.2
SystemRequirements: 
    python (>= 3.0.0), 
    SASPy,
    java (>= 7) required for IOM access method
Imports: 
    htmlwidgets,
    knitr,
    reticulate,
    rstudioapi
URL: https://ryanzomorrodi.github.io/sasquatch/, https://github.com/ryanzomorrodi/sasr
Suggests: 
    rmarkdown,
    testthat (>= 3.0.0)
VignetteBuilder: knitr
Config/testthat/edition: 3
BugReports: https://github.com/ryanzomorrodi/sasr/issues

Scope

  • Please indicate which category or categories from our package fit policies this package falls under: (Please check an appropriate box below. If you are unsure, we suggest you make a pre-submission inquiry.):

    • data retrieval
    • data extraction
    • data munging
    • data deposition
    • data validation and testing
    • workflow automation
    • version control
    • citation management and bibliometrics
    • scientific software wrappers
    • field and lab reproducibility tools
    • database software bindings
    • geospatial data
    • text analysis
  • Explain how and why the package falls under these categories (briefly, 1-2 sentences):

sasquatch allows users to create remote SAS sessions, work with them interactively, pass tables between R and SAS, and render quarto documents.

  • Who is the target audience and what are scientific applications of this package?

The target audience would be anyone looking to combine SAS in R within a single workflow. Using quarto, analysts can have one single reproducable report that combines SAS and R (and python potentially).

saquatch works similarly to packages like sasr or configSAS. sasr, while similar to sasquatch, does not include interactive SAS functionality or a knitr engine. On the other hand, configSAS includes a knitr engine, but no interactive SAS functionality. configSAS knitr output also does not include syntax highlighting and nested SAS output interferes with the styles of the rest of the document.

N/A

  • If you made a pre-submission inquiry, please paste the link to the corresponding issue, forum post, or other discussion, or @tag the editor you contacted.

  • Explain reasons for any pkgcheck items which your package is unable to pass.

Locally, pkgcheck is able to pass all tests except coverage. I do not currently have any coverage over the knitr engine because I am struggling to think about how I can test that effectively. My assumption that the automated pkgcheck testing will fail due to the need for python, python package SASPy, java, and a SAS License. (I have set up a CI that has all of these set up within the sasquatch repo).

Technical checks

Confirm each of the following by checking the box.

This package:

Publication options

  • Do you intend for this package to go on CRAN?

  • Do you intend for this package to go on Bioconductor?

  • Do you wish to submit an Applications Article about your package to Methods in Ecology and Evolution? If so:

MEE Options
  • The package is novel and will be of interest to the broad readership of the journal.
  • The manuscript describing the package is no longer than 3000 words.
  • You intend to archive the code for the package in a long-term repository which meets the requirements of the journal (see MEE's Policy on Publishing Code)
  • (Scope: Do consider MEE's Aims and Scope for your manuscript. We make no guarantee that your manuscript will be within MEE scope.)
  • (Although not required, we strongly recommend having a full manuscript prepared when you submit here.)
  • (Please do not submit your package separately to Methods in Ecology and Evolution)

Code of conduct

@ropensci-review-bot
Copy link
Collaborator

Thanks for submitting to rOpenSci, our editors and @ropensci-review-bot will reply soon. Type @ropensci-review-bot help for help.

@ropensci-review-bot
Copy link
Collaborator

🚀

Editor check started

👋

@ropensci-review-bot
Copy link
Collaborator

Checks for sasquatch (v0.0.0.9004)

git hash: 8353d8ac

  • ✔️ Package name is available
  • ✔️ has a 'codemeta.json' file.
  • ✔️ has a 'contributing' file.
  • ✔️ uses 'roxygen2'.
  • ✔️ 'DESCRIPTION' has a URL field.
  • ✔️ 'DESCRIPTION' has a BugReports field.
  • ✔️ Package has at least one HTML vignette
  • ✔️ All functions have examples.
  • ✔️ Package has continuous integration checks.
  • ✖️ Package coverage failed
  • ✖️ R CMD check found 1 error.
  • ✔️ R CMD check found no warnings.

Important: All failing checks above must be addressed prior to proceeding

Package License: MIT + file LICENSE


1. Package Dependencies

Details of Package Dependency Usage (click to open)

The table below tallies all function calls to all packages ('ncalls'), both internal (r-base + recommended, along with the package itself), and external (imported and suggested packages). 'NA' values indicate packages to which no identified calls to R functions could be found. Note that these results are generated by an automated code-tagging system which may not be entirely accurate.

type package ncalls
internal sasquatch 25
internal base 10
internal graphics 1
imports htmlwidgets 1
imports knitr 1
imports reticulate 1
imports rstudioapi 1
suggests rmarkdown NA
suggests testthat NA
linking_to NA NA

Click below for tallies of functions used in each package. Locations of each call within this package may be generated locally by running 's <- pkgstats::pkgstats(<path/to/repo>)', and examining the 'external_calls' table.

sasquatch

read_file (2), rstudio_context (2), sas_engine (2), check_connection (1), newline (1), r_to_sas (1), rstudio_selection (1), rstudio_text_tidy (1), sas_connect (1), sas_disconnect (1), sas_download (1), sas_get_session (1), sas_list (1), sas_remove (1), sas_run_file (1), sas_run_selected (1), sas_run_string (1), sas_to_r (1), sas_upload (1), sas_use_quarto (1), wrap_in_iframe (1), wrap_in_pre (1)

base

list (2), log (2), system.file (2), length (1), options (1), paste (1), paste0 (1)

graphics

text (1)

htmlwidgets

sizingPolicy (1)

knitr

knit_engines$set (1)

reticulate

import (1)

rstudioapi

primary_selection (1)


2. Statistical Properties

This package features some noteworthy statistical properties which may need to be clarified by a handling editor prior to progressing.

Details of statistical properties (click to open)

The package has:

  • code in R (100% in 9 files) and XML (0% in 1 files)
  • 1 authors
  • 1 vignette
  • no internal data file
  • 4 imported packages
  • 14 exported functions (median 7 lines of code)
  • 39 non-exported functions in R (median 6 lines of code)

Statistical properties of package structure as distributional percentiles in relation to all current CRAN packages
The following terminology is used:

  • loc = "Lines of Code"
  • fn = "function"
  • exp/not_exp = exported / not exported

All parameters are explained as tooltips in the locally-rendered HTML version of this report generated by the checks_to_markdown() function

The final measure (fn_call_network_size) is the total number of calls between functions (in R), or more abstract relationships between code objects in other languages. Values are flagged as "noteworthy" when they lie in the upper or lower 5th percentile.

measure value percentile noteworthy
files_R 9 52.3
files_inst 2 99.0
files_vignettes 1 61.9
files_tests 7 81.9
loc_R 238 26.0
loc_inst 30 35.4
loc_vignettes 128 31.6
loc_tests 130 42.6
num_vignettes 1 58.9
n_fns_r 53 56.9
n_fns_r_exported 14 56.1
n_fns_r_not_exported 39 58.6
n_fns_per_file_r 3 50.0
num_params_per_fn 2 8.2
loc_per_fn_r 7 16.7
loc_per_fn_r_exp 8 16.7
loc_per_fn_r_not_exp 6 14.8
rel_whitespace_R 24 36.3
rel_whitespace_inst 97 51.6
rel_whitespace_vignettes 49 43.9
rel_whitespace_tests 40 55.7
doclines_per_fn_exp 20 14.5
doclines_per_fn_not_exp 0 0.0 TRUE
fn_call_network_size 27 51.6

2a. Network visualisation

Click to see the interactive network visualisation of calls between objects in package


3. goodpractice and other checks

Details of goodpractice checks (click to open)

3a. Continuous Integration Badges

R-CMD-check.yaml

GitHub Workflow Results

id name conclusion sha run_number date
11900852065 pages build and deployment success fbd7ec 29 2024-11-18
11900828295 pkgdown.yaml success 8353d8 29 2024-11-18
11900828308 R-CMD-check.yaml success 8353d8 12 2024-11-18
11900828293 test-coverage.yaml success 8353d8 12 2024-11-18

3b. goodpractice results

R CMD check with rcmdcheck

R CMD check generated the following error:

  1. checking tests ...
    Running ‘testthat.R’
    ERROR
    Running the tests in ‘tests/testthat.R’ failed.
    Last 13 lines of output:
    5. └─reticulate (local) python_not_found("Python shared library not found, Python bindings not loaded.")
    ── Error ('test-run.R:18:3'): Run SAS code from file ───────────────────────────
    Error: Python shared library not found, Python bindings not loaded.
    Please create a default virtual environment with reticulate::virtualenv_create('r-reticulate').
    Backtrace:
    1. └─sasquatch::sas_connect() at test-run.R:18:3
    2. └─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
    3. └─reticulate:::ensure_python_initialized()
      
    4.   └─reticulate:::initialize_python()
      
    5.     └─reticulate (local) python_not_found("Python shared library not found, Python bindings not loaded.")
      

[ FAIL 12 | WARN 0 | SKIP 0 | PASS 14 ]
Error: Test failures
Execution halted

R CMD check generated the following test_fail:

  1. This file is part of the standard setup for testthat.

It is recommended that you do not modify it.

Where should you do additional test configuration?

Learn more about the roles of various files in:

* https://r-pkgs.org/testing-design.html#sec-tests-files-overview

* https://testthat.r-lib.org/articles/special-files.html

library(testthat)
library(sasquatch)

test_check("sasquatch")
[ FAIL 12 | WARN 0 | SKIP 0 | PASS 14 ]

══ Failed tests ════════════════════════════════════════════════════════════════
── Failure ('test-connection.R:2:3'): test connection ──────────────────────────
Expected sas_connect() to run without any errors.
i Actually got a with text:
Python shared library not found, Python bindings not loaded.
Please create a default virtual environment with reticulate::virtualenv_create('r-reticulate').
── Failure ('test-connection.R:4:3'): test connection ──────────────────────────
Expected sas_connect("oda") to run without any errors.
i Actually got a with text:
Python shared library not found, Python bindings not loaded.
Please create a default virtual environment with reticulate::virtualenv_create('r-reticulate').
── Failure ('test-connection.R:6:3'): test connection ──────────────────────────
Expected sas_get_session() to run without any errors.
i Actually got a with text:
No current SAS session. Use sas_connect() to start one.
── Failure ('test-connection.R:8:3'): test connection ──────────────────────────
Expected sas_disconnect() to run without any errors.
i Actually got a with text:
No current SAS session. Use sas_connect() to start one.
── Error ('test-conversion.R:2:3'): SAS to R data.frame ────────────────────────
Error: Python shared library not found, Python bindings not loaded.
Please create a default virtual environment with reticulate::virtualenv_create('r-reticulate').
Backtrace:

  1. └─sasquatch::sas_connect() at test-conversion.R:2:3
  2. └─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
  3. └─reticulate:::ensure_python_initialized()
    
  4.   └─reticulate:::initialize_python()
    
  5.     └─reticulate (local) python_not_found("Python shared library not found, Python bindings not loaded.")
    

── Error ('test-conversion.R:24:3'): R to SAS data.frame ───────────────────────
Error: Python shared library not found, Python bindings not loaded.
Please create a default virtual environment with reticulate::virtualenv_create('r-reticulate').
Backtrace:

  1. └─sasquatch::sas_connect() at test-conversion.R:24:3
  2. └─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
  3. └─reticulate:::ensure_python_initialized()
    
  4.   └─reticulate:::initialize_python()
    
  5.     └─reticulate (local) python_not_found("Python shared library not found, Python bindings not loaded.")
    

── Error ('test-io.R:12:3'): uploading files to SAS ────────────────────────────
Error: Python shared library not found, Python bindings not loaded.
Please create a default virtual environment with reticulate::virtualenv_create('r-reticulate').
Backtrace:

  1. └─sasquatch::sas_connect() at test-io.R:12:3
  2. └─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
  3. └─reticulate:::ensure_python_initialized()
    
  4.   └─reticulate:::initialize_python()
    
  5.     └─reticulate (local) python_not_found("Python shared library not found, Python bindings not loaded.")
    

── Error ('test-io.R:34:3'): download files from SAS ───────────────────────────
Error: Python shared library not found, Python bindings not loaded.
Please create a default virtual environment with reticulate::virtualenv_create('r-reticulate').
Backtrace:

  1. └─sasquatch::sas_connect() at test-io.R:34:3
  2. └─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
  3. └─reticulate:::ensure_python_initialized()
    
  4.   └─reticulate:::initialize_python()
    
  5.     └─reticulate (local) python_not_found("Python shared library not found, Python bindings not loaded.")
    

── Error ('test-io.R:61:3'): removing files from SAS ───────────────────────────
Error: Python shared library not found, Python bindings not loaded.
Please create a default virtual environment with reticulate::virtualenv_create('r-reticulate').
Backtrace:

  1. └─sasquatch::sas_connect() at test-io.R:61:3
  2. └─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
  3. └─reticulate:::ensure_python_initialized()
    
  4.   └─reticulate:::initialize_python()
    
  5.     └─reticulate (local) python_not_found("Python shared library not found, Python bindings not loaded.")
    

── Error ('test-io.R:85:3'): listing files ─────────────────────────────────────
Error: Python shared library not found, Python bindings not loaded.
Please create a default virtual environment with reticulate::virtualenv_create('r-reticulate').
Backtrace:

  1. └─sasquatch::sas_connect() at test-io.R:85:3
  2. └─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
  3. └─reticulate:::ensure_python_initialized()
    
  4.   └─reticulate:::initialize_python()
    
  5.     └─reticulate (local) python_not_found("Python shared library not found, Python bindings not loaded.")
    

── Error ('test-run.R:4:3'): Run SAS code from string ──────────────────────────
Error: Python shared library not found, Python bindings not loaded.
Please create a default virtual environment with reticulate::virtualenv_create('r-reticulate').
Backtrace:

  1. └─sasquatch::sas_connect() at test-run.R:4:3
  2. └─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
  3. └─reticulate:::ensure_python_initialized()
    
  4.   └─reticulate:::initialize_python()
    
  5.     └─reticulate (local) python_not_found("Python shared library not found, Python bindings not loaded.")
    

── Error ('test-run.R:18:3'): Run SAS code from file ───────────────────────────
Error: Python shared library not found, Python bindings not loaded.
Please create a default virtual environment with reticulate::virtualenv_create('r-reticulate').
Backtrace:

  1. └─sasquatch::sas_connect() at test-run.R:18:3
  2. └─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
  3. └─reticulate:::ensure_python_initialized()
    
  4.   └─reticulate:::initialize_python()
    
  5.     └─reticulate (local) python_not_found("Python shared library not found, Python bindings not loaded.")
    

[ FAIL 12 | WARN 0 | SKIP 0 | PASS 14 ]
Error: Test failures
Execution halted

R CMD check generated the following check_fail:

  1. rcmdcheck_tests_pass

Test coverage with covr

ERROR: Test Coverage Failed

Cyclocomplexity with cyclocomp

No functions have cyclocomplexity >= 15

Static code analyses with lintr

lintr found no issues with this package!


Package Versions

package version
pkgstats 0.2.0.48
pkgcheck 0.1.2.68


Editor-in-Chief Instructions:

Processing may not proceed until the items marked with ✖️ have been resolved.

mpadge added a commit to ropensci-review-tools/pkgcheck that referenced this issue Nov 19, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants