-
-
Notifications
You must be signed in to change notification settings - Fork 106
sasquatch
: Use SAS, R, and Quarto together
#673
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
Comments
Thanks for submitting to rOpenSci, our editors and @ropensci-review-bot will reply soon. Type |
🚀 Editor check started 👋 |
Checks for sasquatch (v0.0.0.9004)git hash: 8353d8ac
Important: All failing checks above must be addressed prior to proceeding Package License: MIT + file LICENSE 1. Package DependenciesDetails 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.
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. sasquatchread_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) baselist (2), log (2), system.file (2), length (1), options (1), paste (1), paste0 (1) graphicstext (1) htmlwidgetssizingPolicy (1) knitrknit_engines$set (1) reticulateimport (1) rstudioapiprimary_selection (1) 2. Statistical PropertiesThis 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:
Statistical properties of package structure as distributional percentiles in relation to all current CRAN packages
All parameters are explained as tooltips in the locally-rendered HTML version of this report generated by the The final measure (
2a. Network visualisationClick to see the interactive network visualisation of calls between objects in package 3.
|
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:
- 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 withreticulate::virtualenv_create('r-reticulate')
.
Backtrace:
▆- └─sasquatch::sas_connect() at test-run.R:18:3
- └─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
-
└─reticulate:::ensure_python_initialized()
-
└─reticulate:::initialize_python()
-
└─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:
-
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:
▆
- └─sasquatch::sas_connect() at test-conversion.R:2:3
- └─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
-
└─reticulate:::ensure_python_initialized()
-
└─reticulate:::initialize_python()
-
└─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:
▆
- └─sasquatch::sas_connect() at test-conversion.R:24:3
- └─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
-
└─reticulate:::ensure_python_initialized()
-
└─reticulate:::initialize_python()
-
└─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:
▆
- └─sasquatch::sas_connect() at test-io.R:12:3
- └─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
-
└─reticulate:::ensure_python_initialized()
-
└─reticulate:::initialize_python()
-
└─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:
▆
- └─sasquatch::sas_connect() at test-io.R:34:3
- └─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
-
└─reticulate:::ensure_python_initialized()
-
└─reticulate:::initialize_python()
-
└─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:
▆
- └─sasquatch::sas_connect() at test-io.R:61:3
- └─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
-
└─reticulate:::ensure_python_initialized()
-
└─reticulate:::initialize_python()
-
└─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:
▆
- └─sasquatch::sas_connect() at test-io.R:85:3
- └─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
-
└─reticulate:::ensure_python_initialized()
-
└─reticulate:::initialize_python()
-
└─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:
▆
- └─sasquatch::sas_connect() at test-run.R:4:3
- └─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
-
└─reticulate:::ensure_python_initialized()
-
└─reticulate:::initialize_python()
-
└─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:
▆
- └─sasquatch::sas_connect() at test-run.R:18:3
- └─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
-
└─reticulate:::ensure_python_initialized()
-
└─reticulate:::initialize_python()
-
└─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:
- 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.
Hi @ryanzomorrodi ! Thanks for your submission. I see your (Transparently, I'm not a SAS user, so I lack some background context on this space.) |
Hi @emilyriederer , I have never used the native One package I forgot to mention is One of the advantages in relying on the SASPy Python package is SASPy can connect to both local and remote SAS clients. The configuration is a bit tedious, but at least for SODA, |
Hi @ryanzomorrodi - Thank you for your replied and your patience! I'm seeking out some editors with SAS expertise to help the process here, but will aim to get back to you soon. |
Sounds great! Thank you |
Hi @ryanzomorrodi - I'm happy to share that we think (Also, what an absolutely perfect name...) |
@ropensci-review-bot check package |
Thanks, about to send the query. |
🚀 Editor check started 👋 |
Checks for sasquatch (v0.0.0.9014)git hash: b506da05
Important: All failing checks above must be addressed prior to proceeding Package License: MIT + file LICENSE 1. Package DependenciesDetails 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.
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. baselist (6), paste0 (5), paste (4), readline (3), log (2), options (2), c (1), length (1), readLines (1), sapply (1), seq_along (1), sub (1), Sys.getenv (1), Sys.which (1), system.file (1), unique (1) sasquatchmenu (4), get_home_dir (2), list_to_config_dict (2), read_file (2), rstudio_context (2), sas_engine (2), check_connection (1), configure_saspy (1), document (1), install_saspy (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), wrap_in_iframe (1), wrap_in_pre (1) reticulateimport (1), py_discover_config (1), virtualenv_remove (1) graphicstext (1), title (1) knitrknit_engines$set (1), knit_hooks$set (1) htmlwidgetssizingPolicy (1) rstudioapiprimary_selection (1) 2. Statistical PropertiesThis 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:
Statistical properties of package structure as distributional percentiles in relation to all current CRAN packages
All parameters are explained as tooltips in the locally-rendered HTML version of this report generated by the The final measure (
2a. Network visualisationClick to see the interactive network visualisation of calls between objects in package 3.
|
id | name | conclusion | sha | run_number | date |
---|---|---|---|---|---|
11990402536 | pages build and deployment | success | 5afcec | 43 | 2024-11-23 |
11990389814 | pkgdown.yaml | success | b506da | 45 | 2024-11-23 |
11990389816 | R-CMD-check.yaml | failure | b506da | 28 | 2024-11-23 |
11990150794 | test-coverage.yaml | failure | d5bab8 | 26 | 2024-11-23 |
3b. goodpractice
results
R CMD check
with rcmdcheck
R CMD check generated the following error:
- checking tests ...
Running ‘testthat.R’
ERROR
Running the tests in ‘tests/testthat.R’ failed.
Last 13 lines of output:
Backtrace:
▆- ├─sasquatch::sas_connect() at test-run.R:22:3
- │ ├─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
- │ │ ├─base::tryCatch(...)
- │ │ │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
- │ │ └─base::force(expr)
- │ ├─.pkgenv$SASPy$SASsession
- │ └─reticulate:::
$.python.builtin.module
(.pkgenv$SASPy, "SASsession") - │ └─reticulate::py_get_attr(x, name, TRUE)
- └─reticulate (local)
<fn>
(<python.builtin.module>
)
[ FAIL 12 | WARN 0 | SKIP 0 | PASS 13 ]
Error: Test failures
Execution halted
R CMD check generated the following test_fail:
-
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")
List of 22
$ python : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ libpython : chr "/usr/lib/python3.8/config-3.8-x86_64-linux-gnu/libpython3.8.so"
$ pythonhome : chr "/root/.virtualenvs/r-reticulate:/root/.virtualenvs/r-reticulate"
$ pythonpath : chr "/usr/lib/python38.zip:/usr/lib/python3.8:/usr/lib/python3.8/lib-dynload:/root/.virtualenvs/r-reticulate/lib/pyt"| truncated
$ prefix : chr "/root/.virtualenvs/r-reticulate"
$ exec_prefix : chr "/root/.virtualenvs/r-reticulate"
$ base_exec_prefix : chr "/usr"
$ virtualenv : chr "/root/.virtualenvs/r-reticulate"
$ virtualenv_activate : chr ""
$ executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ base_executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ version_string : chr "3.8.10 (default, Nov 7 2024, 13:10:47) [GCC 9.4.0]"
$ version :Classes 'package_version', 'numeric_version' hidden list of 1
..$ : int [1:2] 3 8
$ architecture : chr "64bit"
$ anaconda : logi FALSE
$ conda : chr "False"
$ numpy :List of 2
..$ path : chr "/root/.virtualenvs/r-reticulate/lib/python3.8/site-packages/numpy"
..$ version:Class 'numeric_version' hidden list of 1
.. ..$ : int [1:3] 1 24 4
$ required_module : chr "saspy"
$ required_module_path: NULL
$ available : logi TRUE
$ python_versions : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ forced : NULL
- attr(*, "class")= chr "py_config"
List of 22
$ python : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ libpython : chr "/usr/lib/python3.8/config-3.8-x86_64-linux-gnu/libpython3.8.so"
$ pythonhome : chr "/root/.virtualenvs/r-reticulate:/root/.virtualenvs/r-reticulate"
$ pythonpath : chr "/usr/lib/python38.zip:/usr/lib/python3.8:/usr/lib/python3.8/lib-dynload:/root/.virtualenvs/r-reticulate/lib/pyt"| truncated
$ prefix : chr "/root/.virtualenvs/r-reticulate"
$ exec_prefix : chr "/root/.virtualenvs/r-reticulate"
$ base_exec_prefix : chr "/usr"
$ virtualenv : chr "/root/.virtualenvs/r-reticulate"
$ virtualenv_activate : chr ""
$ executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ base_executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ version_string : chr "3.8.10 (default, Nov 7 2024, 13:10:47) [GCC 9.4.0]"
$ version :Classes 'package_version', 'numeric_version' hidden list of 1
..$ : int [1:2] 3 8
$ architecture : chr "64bit"
$ anaconda : logi FALSE
$ conda : chr "False"
$ numpy :List of 2
..$ path : chr "/root/.virtualenvs/r-reticulate/lib/python3.8/site-packages/numpy"
..$ version:Class 'numeric_version' hidden list of 1
.. ..$ : int [1:3] 1 24 4
$ required_module : chr "saspy"
$ required_module_path: NULL
$ available : logi TRUE
$ python_versions : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ forced : NULL - attr(*, "class")= chr "py_config"
List of 22
$ python : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ libpython : chr "/usr/lib/python3.8/config-3.8-x86_64-linux-gnu/libpython3.8.so"
$ pythonhome : chr "/root/.virtualenvs/r-reticulate:/root/.virtualenvs/r-reticulate"
$ pythonpath : chr "/usr/lib/python38.zip:/usr/lib/python3.8:/usr/lib/python3.8/lib-dynload:/root/.virtualenvs/r-reticulate/lib/pyt"| truncated
$ prefix : chr "/root/.virtualenvs/r-reticulate"
$ exec_prefix : chr "/root/.virtualenvs/r-reticulate"
$ base_exec_prefix : chr "/usr"
$ virtualenv : chr "/root/.virtualenvs/r-reticulate"
$ virtualenv_activate : chr ""
$ executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ base_executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ version_string : chr "3.8.10 (default, Nov 7 2024, 13:10:47) [GCC 9.4.0]"
$ version :Classes 'package_version', 'numeric_version' hidden list of 1
..$ : int [1:2] 3 8
$ architecture : chr "64bit"
$ anaconda : logi FALSE
$ conda : chr "False"
$ numpy :List of 2
..$ path : chr "/root/.virtualenvs/r-reticulate/lib/python3.8/site-packages/numpy"
..$ version:Class 'numeric_version' hidden list of 1
.. ..$ : int [1:3] 1 24 4
$ required_module : chr "saspy"
$ required_module_path: NULL
$ available : logi TRUE
$ python_versions : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ forced : NULL - attr(*, "class")= chr "py_config"
List of 22
$ python : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ libpython : chr "/usr/lib/python3.8/config-3.8-x86_64-linux-gnu/libpython3.8.so"
$ pythonhome : chr "/root/.virtualenvs/r-reticulate:/root/.virtualenvs/r-reticulate"
$ pythonpath : chr "/usr/lib/python38.zip:/usr/lib/python3.8:/usr/lib/python3.8/lib-dynload:/root/.virtualenvs/r-reticulate/lib/pyt"| truncated
$ prefix : chr "/root/.virtualenvs/r-reticulate"
$ exec_prefix : chr "/root/.virtualenvs/r-reticulate"
$ base_exec_prefix : chr "/usr"
$ virtualenv : chr "/root/.virtualenvs/r-reticulate"
$ virtualenv_activate : chr ""
$ executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ base_executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ version_string : chr "3.8.10 (default, Nov 7 2024, 13:10:47) [GCC 9.4.0]"
$ version :Classes 'package_version', 'numeric_version' hidden list of 1
..$ : int [1:2] 3 8
$ architecture : chr "64bit"
$ anaconda : logi FALSE
$ conda : chr "False"
$ numpy :List of 2
..$ path : chr "/root/.virtualenvs/r-reticulate/lib/python3.8/site-packages/numpy"
..$ version:Class 'numeric_version' hidden list of 1
.. ..$ : int [1:3] 1 24 4
$ required_module : chr "saspy"
$ required_module_path: NULL
$ available : logi TRUE
$ python_versions : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ forced : NULL - attr(*, "class")= chr "py_config"
List of 22
$ python : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ libpython : chr "/usr/lib/python3.8/config-3.8-x86_64-linux-gnu/libpython3.8.so"
$ pythonhome : chr "/root/.virtualenvs/r-reticulate:/root/.virtualenvs/r-reticulate"
$ pythonpath : chr "/usr/lib/python38.zip:/usr/lib/python3.8:/usr/lib/python3.8/lib-dynload:/root/.virtualenvs/r-reticulate/lib/pyt"| truncated
$ prefix : chr "/root/.virtualenvs/r-reticulate"
$ exec_prefix : chr "/root/.virtualenvs/r-reticulate"
$ base_exec_prefix : chr "/usr"
$ virtualenv : chr "/root/.virtualenvs/r-reticulate"
$ virtualenv_activate : chr ""
$ executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ base_executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ version_string : chr "3.8.10 (default, Nov 7 2024, 13:10:47) [GCC 9.4.0]"
$ version :Classes 'package_version', 'numeric_version' hidden list of 1
..$ : int [1:2] 3 8
$ architecture : chr "64bit"
$ anaconda : logi FALSE
$ conda : chr "False"
$ numpy :List of 2
..$ path : chr "/root/.virtualenvs/r-reticulate/lib/python3.8/site-packages/numpy"
..$ version:Class 'numeric_version' hidden list of 1
.. ..$ : int [1:3] 1 24 4
$ required_module : chr "saspy"
$ required_module_path: NULL
$ available : logi TRUE
$ python_versions : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ forced : NULL - attr(*, "class")= chr "py_config"
List of 22
$ python : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ libpython : chr "/usr/lib/python3.8/config-3.8-x86_64-linux-gnu/libpython3.8.so"
$ pythonhome : chr "/root/.virtualenvs/r-reticulate:/root/.virtualenvs/r-reticulate"
$ pythonpath : chr "/usr/lib/python38.zip:/usr/lib/python3.8:/usr/lib/python3.8/lib-dynload:/root/.virtualenvs/r-reticulate/lib/pyt"| truncated
$ prefix : chr "/root/.virtualenvs/r-reticulate"
$ exec_prefix : chr "/root/.virtualenvs/r-reticulate"
$ base_exec_prefix : chr "/usr"
$ virtualenv : chr "/root/.virtualenvs/r-reticulate"
$ virtualenv_activate : chr ""
$ executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ base_executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ version_string : chr "3.8.10 (default, Nov 7 2024, 13:10:47) [GCC 9.4.0]"
$ version :Classes 'package_version', 'numeric_version' hidden list of 1
..$ : int [1:2] 3 8
$ architecture : chr "64bit"
$ anaconda : logi FALSE
$ conda : chr "False"
$ numpy :List of 2
..$ path : chr "/root/.virtualenvs/r-reticulate/lib/python3.8/site-packages/numpy"
..$ version:Class 'numeric_version' hidden list of 1
.. ..$ : int [1:3] 1 24 4
$ required_module : chr "saspy"
$ required_module_path: NULL
$ available : logi TRUE
$ python_versions : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ forced : NULL - attr(*, "class")= chr "py_config"
List of 22
$ python : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ libpython : chr "/usr/lib/python3.8/config-3.8-x86_64-linux-gnu/libpython3.8.so"
$ pythonhome : chr "/root/.virtualenvs/r-reticulate:/root/.virtualenvs/r-reticulate"
$ pythonpath : chr "/usr/lib/python38.zip:/usr/lib/python3.8:/usr/lib/python3.8/lib-dynload:/root/.virtualenvs/r-reticulate/lib/pyt"| truncated
$ prefix : chr "/root/.virtualenvs/r-reticulate"
$ exec_prefix : chr "/root/.virtualenvs/r-reticulate"
$ base_exec_prefix : chr "/usr"
$ virtualenv : chr "/root/.virtualenvs/r-reticulate"
$ virtualenv_activate : chr ""
$ executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ base_executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ version_string : chr "3.8.10 (default, Nov 7 2024, 13:10:47) [GCC 9.4.0]"
$ version :Classes 'package_version', 'numeric_version' hidden list of 1
..$ : int [1:2] 3 8
$ architecture : chr "64bit"
$ anaconda : logi FALSE
$ conda : chr "False"
$ numpy :List of 2
..$ path : chr "/root/.virtualenvs/r-reticulate/lib/python3.8/site-packages/numpy"
..$ version:Class 'numeric_version' hidden list of 1
.. ..$ : int [1:3] 1 24 4
$ required_module : chr "saspy"
$ required_module_path: NULL
$ available : logi TRUE
$ python_versions : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ forced : NULL - attr(*, "class")= chr "py_config"
List of 22
$ python : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ libpython : chr "/usr/lib/python3.8/config-3.8-x86_64-linux-gnu/libpython3.8.so"
$ pythonhome : chr "/root/.virtualenvs/r-reticulate:/root/.virtualenvs/r-reticulate"
$ pythonpath : chr "/usr/lib/python38.zip:/usr/lib/python3.8:/usr/lib/python3.8/lib-dynload:/root/.virtualenvs/r-reticulate/lib/pyt"| truncated
$ prefix : chr "/root/.virtualenvs/r-reticulate"
$ exec_prefix : chr "/root/.virtualenvs/r-reticulate"
$ base_exec_prefix : chr "/usr"
$ virtualenv : chr "/root/.virtualenvs/r-reticulate"
$ virtualenv_activate : chr ""
$ executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ base_executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ version_string : chr "3.8.10 (default, Nov 7 2024, 13:10:47) [GCC 9.4.0]"
$ version :Classes 'package_version', 'numeric_version' hidden list of 1
..$ : int [1:2] 3 8
$ architecture : chr "64bit"
$ anaconda : logi FALSE
$ conda : chr "False"
$ numpy :List of 2
..$ path : chr "/root/.virtualenvs/r-reticulate/lib/python3.8/site-packages/numpy"
..$ version:Class 'numeric_version' hidden list of 1
.. ..$ : int [1:3] 1 24 4
$ required_module : chr "saspy"
$ required_module_path: NULL
$ available : logi TRUE
$ python_versions : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ forced : NULL - attr(*, "class")= chr "py_config"
List of 22
$ python : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ libpython : chr "/usr/lib/python3.8/config-3.8-x86_64-linux-gnu/libpython3.8.so"
$ pythonhome : chr "/root/.virtualenvs/r-reticulate:/root/.virtualenvs/r-reticulate"
$ pythonpath : chr "/usr/lib/python38.zip:/usr/lib/python3.8:/usr/lib/python3.8/lib-dynload:/root/.virtualenvs/r-reticulate/lib/pyt"| truncated
$ prefix : chr "/root/.virtualenvs/r-reticulate"
$ exec_prefix : chr "/root/.virtualenvs/r-reticulate"
$ base_exec_prefix : chr "/usr"
$ virtualenv : chr "/root/.virtualenvs/r-reticulate"
$ virtualenv_activate : chr ""
$ executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ base_executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ version_string : chr "3.8.10 (default, Nov 7 2024, 13:10:47) [GCC 9.4.0]"
$ version :Classes 'package_version', 'numeric_version' hidden list of 1
..$ : int [1:2] 3 8
$ architecture : chr "64bit"
$ anaconda : logi FALSE
$ conda : chr "False"
$ numpy :List of 2
..$ path : chr "/root/.virtualenvs/r-reticulate/lib/python3.8/site-packages/numpy"
..$ version:Class 'numeric_version' hidden list of 1
.. ..$ : int [1:3] 1 24 4
$ required_module : chr "saspy"
$ required_module_path: NULL
$ available : logi TRUE
$ python_versions : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ forced : NULL - attr(*, "class")= chr "py_config"
List of 22
$ python : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ libpython : chr "/usr/lib/python3.8/config-3.8-x86_64-linux-gnu/libpython3.8.so"
$ pythonhome : chr "/root/.virtualenvs/r-reticulate:/root/.virtualenvs/r-reticulate"
$ pythonpath : chr "/usr/lib/python38.zip:/usr/lib/python3.8:/usr/lib/python3.8/lib-dynload:/root/.virtualenvs/r-reticulate/lib/pyt"| truncated
$ prefix : chr "/root/.virtualenvs/r-reticulate"
$ exec_prefix : chr "/root/.virtualenvs/r-reticulate"
$ base_exec_prefix : chr "/usr"
$ virtualenv : chr "/root/.virtualenvs/r-reticulate"
$ virtualenv_activate : chr ""
$ executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ base_executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ version_string : chr "3.8.10 (default, Nov 7 2024, 13:10:47) [GCC 9.4.0]"
$ version :Classes 'package_version', 'numeric_version' hidden list of 1
..$ : int [1:2] 3 8
$ architecture : chr "64bit"
$ anaconda : logi FALSE
$ conda : chr "False"
$ numpy :List of 2
..$ path : chr "/root/.virtualenvs/r-reticulate/lib/python3.8/site-packages/numpy"
..$ version:Class 'numeric_version' hidden list of 1
.. ..$ : int [1:3] 1 24 4
$ required_module : chr "saspy"
$ required_module_path: NULL
$ available : logi TRUE
$ python_versions : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ forced : NULL - attr(*, "class")= chr "py_config"
[ FAIL 12 | WARN 0 | SKIP 0 | PASS 13 ]
══ Failed tests ════════════════════════════════════════════════════════════════
── Failure ('test-connection.R:4:3'): test connection ──────────────────────────
Expected sas_connect()
to run without any errors.
i Actually got a with text:
Python module saspy was not found.
Detected Python configuration:
── Failure ('test-connection.R:6:3'): test connection ──────────────────────────
Expected sas_connect("oda")
to run without any errors.
i Actually got a with text:
Python module saspy was not found.
Detected Python configuration:
── Failure ('test-connection.R:8: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:10: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:4:3'): SAS to R data.frame ────────────────────────
Error: Python module saspy was not found.
Detected Python configuration:
Backtrace:
▆
- ├─sasquatch::sas_connect() at test-conversion.R:4:3
- │ ├─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
- │ │ ├─base::tryCatch(...)
- │ │ │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
- │ │ └─base::force(expr)
- │ ├─.pkgenv$SASPy$SASsession
- │ └─reticulate:::
$.python.builtin.module
(.pkgenv$SASPy, "SASsession") - │ └─reticulate::py_get_attr(x, name, TRUE)
- └─reticulate (local)
<fn>
(<python.builtin.module>
)
── Error ('test-conversion.R:28:3'): R to SAS data.frame ───────────────────────
Error: Python module saspy was not found.
Detected Python configuration:
Backtrace:
▆
- ├─sasquatch::sas_connect() at test-conversion.R:28:3
- │ ├─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
- │ │ ├─base::tryCatch(...)
- │ │ │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
- │ │ └─base::force(expr)
- │ ├─.pkgenv$SASPy$SASsession
- │ └─reticulate:::
$.python.builtin.module
(.pkgenv$SASPy, "SASsession") - │ └─reticulate::py_get_attr(x, name, TRUE)
- └─reticulate (local)
<fn>
(<python.builtin.module>
)
── Error ('test-io.R:14:3'): uploading files to SAS ────────────────────────────
Error: Python module saspy was not found.
Detected Python configuration:
Backtrace:
▆
- ├─sasquatch::sas_connect() at test-io.R:14:3
- │ ├─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
- │ │ ├─base::tryCatch(...)
- │ │ │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
- │ │ └─base::force(expr)
- │ ├─.pkgenv$SASPy$SASsession
- │ └─reticulate:::
$.python.builtin.module
(.pkgenv$SASPy, "SASsession") - │ └─reticulate::py_get_attr(x, name, TRUE)
- └─reticulate (local)
<fn>
(<python.builtin.module>
)
── Error ('test-io.R:38:3'): download files from SAS ───────────────────────────
Error: Python module saspy was not found.
Detected Python configuration:
Backtrace:
▆
- ├─sasquatch::sas_connect() at test-io.R:38:3
- │ ├─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
- │ │ ├─base::tryCatch(...)
- │ │ │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
- │ │ └─base::force(expr)
- │ ├─.pkgenv$SASPy$SASsession
- │ └─reticulate:::
$.python.builtin.module
(.pkgenv$SASPy, "SASsession") - │ └─reticulate::py_get_attr(x, name, TRUE)
- └─reticulate (local)
<fn>
(<python.builtin.module>
)
── Error ('test-io.R:67:3'): removing files from SAS ───────────────────────────
Error: Python module saspy was not found.
Detected Python configuration:
Backtrace:
▆
- ├─sasquatch::sas_connect() at test-io.R:67:3
- │ ├─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
- │ │ ├─base::tryCatch(...)
- │ │ │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
- │ │ └─base::force(expr)
- │ ├─.pkgenv$SASPy$SASsession
- │ └─reticulate:::
$.python.builtin.module
(.pkgenv$SASPy, "SASsession") - │ └─reticulate::py_get_attr(x, name, TRUE)
- └─reticulate (local)
<fn>
(<python.builtin.module>
)
── Error ('test-io.R:93:3'): listing files ─────────────────────────────────────
Error: Python module saspy was not found.
Detected Python configuration:
Backtrace:
▆
- ├─sasquatch::sas_connect() at test-io.R:93:3
- │ ├─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
- │ │ ├─base::tryCatch(...)
- │ │ │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
- │ │ └─base::force(expr)
- │ ├─.pkgenv$SASPy$SASsession
- │ └─reticulate:::
$.python.builtin.module
(.pkgenv$SASPy, "SASsession") - │ └─reticulate::py_get_attr(x, name, TRUE)
- └─reticulate (local)
<fn>
(<python.builtin.module>
)
── Error ('test-run.R:6:3'): Run SAS code from string ──────────────────────────
Error: Python module saspy was not found.
Detected Python configuration:
Backtrace:
▆
- ├─sasquatch::sas_connect() at test-run.R:6:3
- │ ├─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
- │ │ ├─base::tryCatch(...)
- │ │ │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
- │ │ └─base::force(expr)
- │ ├─.pkgenv$SASPy$SASsession
- │ └─reticulate:::
$.python.builtin.module
(.pkgenv$SASPy, "SASsession") - │ └─reticulate::py_get_attr(x, name, TRUE)
- └─reticulate (local)
<fn>
(<python.builtin.module>
)
── Error ('test-run.R:22:3'): Run SAS code from file ───────────────────────────
Error: Python module saspy was not found.
Detected Python configuration:
Backtrace:
▆
- ├─sasquatch::sas_connect() at test-run.R:22:3
- │ ├─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
- │ │ ├─base::tryCatch(...)
- │ │ │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
- │ │ └─base::force(expr)
- │ ├─.pkgenv$SASPy$SASsession
- │ └─reticulate:::
$.python.builtin.module
(.pkgenv$SASPy, "SASsession") - │ └─reticulate::py_get_attr(x, name, TRUE)
- └─reticulate (local)
<fn>
(<python.builtin.module>
)
[ FAIL 12 | WARN 0 | SKIP 0 | PASS 13 ]
Error: Test failures
Execution halted
R CMD check generated the following check_fail:
- rcmdcheck_tests_pass
Test coverage with covr
ERROR: Test Coverage Failed
Cyclocomplexity with cyclocomp
The following function have cyclocomplexity >= 15:
function | cyclocomplexity |
---|---|
configure_saspy | 16 |
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.77 |
Editor-in-Chief Instructions:
Processing may not proceed until the items marked with ✖️ have been resolved.
Incidentally, @ryanzomorrodi -- I see you mention not having a good idea for testing your Other ideas (that I haven't tried) might include snapshot testing. Again, maybe not the best way, maybe not necessary (the handling editor and reviewer can decide that) but just a few passing thoughts. I also recognize that knitr engines I think are a bit more binary in how and whether they work so may not benefit from testing as much as parts of the code with many corner cases. |
That seems like a very reasonable approach, I will try it out. Thank you |
@ropensci-review-bot assign @maurolepore as editor |
Assigned! @maurolepore is now the editor |
Dear @ryanzomorrodi, thanks so much for your submission. I'm happy to be the handling editor. Within the next few days I'll be reading this thread in more detail, and going through editor checks.
It might help you to see the criteria we use to choose reviewers, particularly how we define a conflict of interest. It's also a good time to do any changes you might have in mind. Once the reviews start it's best to avoid forcing reviewers to work against a moving target. Very excited your tool as a way to bridge SAS and R 💯 🥇 |
Hi @maurolepore That's great to hear! I reviewed the criteria, but I'm wondering if there is a set list of reviewers to choose from or should I post something on social media. It looks like the book mentions an Airtable directory, but it feels like that is just for editors. My primary interest is to select reviewers with some level of SAS experience. |
@ryanzomorrodi, that's right, that airtable database is restricted to editors. If nobody from your own network comes to mind, then no need to stretch to social media. We ask for suggestions only to ensure we understand the kind of skills the author believes to be useful, so thanks for highlighting the usefulness of SAS experience 🙏👍 |
Sounds good! I apologize, I'm a relative newcomer to the R open-source world, so I'm not super familiar with the space |
No problem at all. One great reason to be here is precisely to expand your networks :-) |
@ropensci-review-bot check package |
Thanks, about to send the query. |
🚀 Editor check started 👋 |
Checks for sasquatch (v0.0.0.9017)git hash: aee061da
Important: All failing checks above must be addressed prior to proceeding Package License: MIT + file LICENSE 1. Package DependenciesDetails 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.
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. sasquatchmenu (4), get_home_dir (2), list_to_config_dict (2), read_file (2), rstudio_context (2), sas_engine (2), wrap_in_iframe (2), chk_connection (1), chk_has_rownames (1), configure_saspy (1), document (1), execute_safely (1), install_saspy (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), wrap_in_pre (1) baselist (5), paste0 (5), paste (4), readline (3), log (2), options (2), c (1), call (1), length (1), parent.frame (1), readLines (1), sapply (1), seq_along (1), sub (1), Sys.getenv (1), Sys.which (1), system.file (1), unique (1) reticulateimport (1), py_discover_config (1), virtualenv_remove (1) graphicstext (1), title (1) knitrknit_engines$set (1), knit_hooks$set (1) chkabort_chk (1) htmlwidgetssizingPolicy (1) rstudioapiprimary_selection (1) 2. Statistical PropertiesThis 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:
Statistical properties of package structure as distributional percentiles in relation to all current CRAN packages
All parameters are explained as tooltips in the locally-rendered HTML version of this report generated by the The final measure (
2a. Network visualisationClick to see the interactive network visualisation of calls between objects in package 3.
|
id | name | conclusion | sha | run_number | date |
---|---|---|---|---|---|
12408303336 | pages build and deployment | success | dd809c | 45 | 2024-12-19 |
12408283861 | pkgdown.yaml | success | aee061 | 47 | 2024-12-19 |
12408283864 | R-CMD-check.yaml | failure | aee061 | 30 | 2024-12-19 |
11990150794 | test-coverage.yaml | failure | d5bab8 | 26 | 2024-11-23 |
3b. goodpractice
results
R CMD check
with rcmdcheck
R CMD check generated the following error:
- checking tests ...
Running ‘testthat.R’
ERROR
Running the tests in ‘tests/testthat.R’ failed.
Last 13 lines of output:
Backtrace:
▆- ├─sasquatch::sas_connect() at test-run.R:22:3
- │ ├─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
- │ │ ├─base::tryCatch(...)
- │ │ │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
- │ │ └─base::force(expr)
- │ ├─.pkgenv$SASPy$SASsession
- │ └─reticulate:::
$.python.builtin.module
(.pkgenv$SASPy, "SASsession") - │ └─reticulate::py_get_attr(x, name, TRUE)
- └─reticulate (local)
<fn>
(<python.builtin.module>
)
[ FAIL 12 | WARN 0 | SKIP 0 | PASS 9 ]
Error: Test failures
Execution halted
R CMD check generated the following warning:
- checking for code/documentation mismatches ... WARNING
Codoc mismatches from Rd file 'install_saspy.Rd':
install_saspy
Code: function(envname = "r-saspy", extra_packages, restart_session =
TRUE)
Docs: function(envname = "r-saspy", extra_packages = NULL,
restart_session = TRUE)
Mismatches in argument default values:
Name: 'extra_packages' Code: Docs: NULL
R CMD check generated the following test_fail:
-
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")
List of 22
$ python : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ libpython : chr "/usr/lib/python3.8/config-3.8-x86_64-linux-gnu/libpython3.8.so"
$ pythonhome : chr "/root/.virtualenvs/r-reticulate:/root/.virtualenvs/r-reticulate"
$ pythonpath : chr "/usr/lib/python38.zip:/usr/lib/python3.8:/usr/lib/python3.8/lib-dynload:/root/.virtualenvs/r-reticulate/lib/pyt"| truncated
$ prefix : chr "/root/.virtualenvs/r-reticulate"
$ exec_prefix : chr "/root/.virtualenvs/r-reticulate"
$ base_exec_prefix : chr "/usr"
$ virtualenv : chr "/root/.virtualenvs/r-reticulate"
$ virtualenv_activate : chr ""
$ executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ base_executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ version_string : chr "3.8.10 (default, Nov 7 2024, 13:10:47) [GCC 9.4.0]"
$ version :Classes 'package_version', 'numeric_version' hidden list of 1
..$ : int [1:2] 3 8
$ architecture : chr "64bit"
$ anaconda : logi FALSE
$ conda : chr "False"
$ numpy :List of 2
..$ path : chr "/root/.virtualenvs/r-reticulate/lib/python3.8/site-packages/numpy"
..$ version:Class 'numeric_version' hidden list of 1
.. ..$ : int [1:3] 1 24 4
$ required_module : chr "saspy"
$ required_module_path: NULL
$ available : logi TRUE
$ python_versions : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ forced : NULL
- attr(*, "class")= chr "py_config"
List of 22
$ python : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ libpython : chr "/usr/lib/python3.8/config-3.8-x86_64-linux-gnu/libpython3.8.so"
$ pythonhome : chr "/root/.virtualenvs/r-reticulate:/root/.virtualenvs/r-reticulate"
$ pythonpath : chr "/usr/lib/python38.zip:/usr/lib/python3.8:/usr/lib/python3.8/lib-dynload:/root/.virtualenvs/r-reticulate/lib/pyt"| truncated
$ prefix : chr "/root/.virtualenvs/r-reticulate"
$ exec_prefix : chr "/root/.virtualenvs/r-reticulate"
$ base_exec_prefix : chr "/usr"
$ virtualenv : chr "/root/.virtualenvs/r-reticulate"
$ virtualenv_activate : chr ""
$ executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ base_executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ version_string : chr "3.8.10 (default, Nov 7 2024, 13:10:47) [GCC 9.4.0]"
$ version :Classes 'package_version', 'numeric_version' hidden list of 1
..$ : int [1:2] 3 8
$ architecture : chr "64bit"
$ anaconda : logi FALSE
$ conda : chr "False"
$ numpy :List of 2
..$ path : chr "/root/.virtualenvs/r-reticulate/lib/python3.8/site-packages/numpy"
..$ version:Class 'numeric_version' hidden list of 1
.. ..$ : int [1:3] 1 24 4
$ required_module : chr "saspy"
$ required_module_path: NULL
$ available : logi TRUE
$ python_versions : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ forced : NULL - attr(*, "class")= chr "py_config"
List of 22
$ python : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ libpython : chr "/usr/lib/python3.8/config-3.8-x86_64-linux-gnu/libpython3.8.so"
$ pythonhome : chr "/root/.virtualenvs/r-reticulate:/root/.virtualenvs/r-reticulate"
$ pythonpath : chr "/usr/lib/python38.zip:/usr/lib/python3.8:/usr/lib/python3.8/lib-dynload:/root/.virtualenvs/r-reticulate/lib/pyt"| truncated
$ prefix : chr "/root/.virtualenvs/r-reticulate"
$ exec_prefix : chr "/root/.virtualenvs/r-reticulate"
$ base_exec_prefix : chr "/usr"
$ virtualenv : chr "/root/.virtualenvs/r-reticulate"
$ virtualenv_activate : chr ""
$ executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ base_executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ version_string : chr "3.8.10 (default, Nov 7 2024, 13:10:47) [GCC 9.4.0]"
$ version :Classes 'package_version', 'numeric_version' hidden list of 1
..$ : int [1:2] 3 8
$ architecture : chr "64bit"
$ anaconda : logi FALSE
$ conda : chr "False"
$ numpy :List of 2
..$ path : chr "/root/.virtualenvs/r-reticulate/lib/python3.8/site-packages/numpy"
..$ version:Class 'numeric_version' hidden list of 1
.. ..$ : int [1:3] 1 24 4
$ required_module : chr "saspy"
$ required_module_path: NULL
$ available : logi TRUE
$ python_versions : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ forced : NULL - attr(*, "class")= chr "py_config"
List of 22
$ python : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ libpython : chr "/usr/lib/python3.8/config-3.8-x86_64-linux-gnu/libpython3.8.so"
$ pythonhome : chr "/root/.virtualenvs/r-reticulate:/root/.virtualenvs/r-reticulate"
$ pythonpath : chr "/usr/lib/python38.zip:/usr/lib/python3.8:/usr/lib/python3.8/lib-dynload:/root/.virtualenvs/r-reticulate/lib/pyt"| truncated
$ prefix : chr "/root/.virtualenvs/r-reticulate"
$ exec_prefix : chr "/root/.virtualenvs/r-reticulate"
$ base_exec_prefix : chr "/usr"
$ virtualenv : chr "/root/.virtualenvs/r-reticulate"
$ virtualenv_activate : chr ""
$ executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ base_executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ version_string : chr "3.8.10 (default, Nov 7 2024, 13:10:47) [GCC 9.4.0]"
$ version :Classes 'package_version', 'numeric_version' hidden list of 1
..$ : int [1:2] 3 8
$ architecture : chr "64bit"
$ anaconda : logi FALSE
$ conda : chr "False"
$ numpy :List of 2
..$ path : chr "/root/.virtualenvs/r-reticulate/lib/python3.8/site-packages/numpy"
..$ version:Class 'numeric_version' hidden list of 1
.. ..$ : int [1:3] 1 24 4
$ required_module : chr "saspy"
$ required_module_path: NULL
$ available : logi TRUE
$ python_versions : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ forced : NULL - attr(*, "class")= chr "py_config"
List of 22
$ python : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ libpython : chr "/usr/lib/python3.8/config-3.8-x86_64-linux-gnu/libpython3.8.so"
$ pythonhome : chr "/root/.virtualenvs/r-reticulate:/root/.virtualenvs/r-reticulate"
$ pythonpath : chr "/usr/lib/python38.zip:/usr/lib/python3.8:/usr/lib/python3.8/lib-dynload:/root/.virtualenvs/r-reticulate/lib/pyt"| truncated
$ prefix : chr "/root/.virtualenvs/r-reticulate"
$ exec_prefix : chr "/root/.virtualenvs/r-reticulate"
$ base_exec_prefix : chr "/usr"
$ virtualenv : chr "/root/.virtualenvs/r-reticulate"
$ virtualenv_activate : chr ""
$ executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ base_executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ version_string : chr "3.8.10 (default, Nov 7 2024, 13:10:47) [GCC 9.4.0]"
$ version :Classes 'package_version', 'numeric_version' hidden list of 1
..$ : int [1:2] 3 8
$ architecture : chr "64bit"
$ anaconda : logi FALSE
$ conda : chr "False"
$ numpy :List of 2
..$ path : chr "/root/.virtualenvs/r-reticulate/lib/python3.8/site-packages/numpy"
..$ version:Class 'numeric_version' hidden list of 1
.. ..$ : int [1:3] 1 24 4
$ required_module : chr "saspy"
$ required_module_path: NULL
$ available : logi TRUE
$ python_versions : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ forced : NULL - attr(*, "class")= chr "py_config"
List of 22
$ python : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ libpython : chr "/usr/lib/python3.8/config-3.8-x86_64-linux-gnu/libpython3.8.so"
$ pythonhome : chr "/root/.virtualenvs/r-reticulate:/root/.virtualenvs/r-reticulate"
$ pythonpath : chr "/usr/lib/python38.zip:/usr/lib/python3.8:/usr/lib/python3.8/lib-dynload:/root/.virtualenvs/r-reticulate/lib/pyt"| truncated
$ prefix : chr "/root/.virtualenvs/r-reticulate"
$ exec_prefix : chr "/root/.virtualenvs/r-reticulate"
$ base_exec_prefix : chr "/usr"
$ virtualenv : chr "/root/.virtualenvs/r-reticulate"
$ virtualenv_activate : chr ""
$ executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ base_executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ version_string : chr "3.8.10 (default, Nov 7 2024, 13:10:47) [GCC 9.4.0]"
$ version :Classes 'package_version', 'numeric_version' hidden list of 1
..$ : int [1:2] 3 8
$ architecture : chr "64bit"
$ anaconda : logi FALSE
$ conda : chr "False"
$ numpy :List of 2
..$ path : chr "/root/.virtualenvs/r-reticulate/lib/python3.8/site-packages/numpy"
..$ version:Class 'numeric_version' hidden list of 1
.. ..$ : int [1:3] 1 24 4
$ required_module : chr "saspy"
$ required_module_path: NULL
$ available : logi TRUE
$ python_versions : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ forced : NULL - attr(*, "class")= chr "py_config"
List of 22
$ python : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ libpython : chr "/usr/lib/python3.8/config-3.8-x86_64-linux-gnu/libpython3.8.so"
$ pythonhome : chr "/root/.virtualenvs/r-reticulate:/root/.virtualenvs/r-reticulate"
$ pythonpath : chr "/usr/lib/python38.zip:/usr/lib/python3.8:/usr/lib/python3.8/lib-dynload:/root/.virtualenvs/r-reticulate/lib/pyt"| truncated
$ prefix : chr "/root/.virtualenvs/r-reticulate"
$ exec_prefix : chr "/root/.virtualenvs/r-reticulate"
$ base_exec_prefix : chr "/usr"
$ virtualenv : chr "/root/.virtualenvs/r-reticulate"
$ virtualenv_activate : chr ""
$ executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ base_executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ version_string : chr "3.8.10 (default, Nov 7 2024, 13:10:47) [GCC 9.4.0]"
$ version :Classes 'package_version', 'numeric_version' hidden list of 1
..$ : int [1:2] 3 8
$ architecture : chr "64bit"
$ anaconda : logi FALSE
$ conda : chr "False"
$ numpy :List of 2
..$ path : chr "/root/.virtualenvs/r-reticulate/lib/python3.8/site-packages/numpy"
..$ version:Class 'numeric_version' hidden list of 1
.. ..$ : int [1:3] 1 24 4
$ required_module : chr "saspy"
$ required_module_path: NULL
$ available : logi TRUE
$ python_versions : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ forced : NULL - attr(*, "class")= chr "py_config"
List of 22
$ python : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ libpython : chr "/usr/lib/python3.8/config-3.8-x86_64-linux-gnu/libpython3.8.so"
$ pythonhome : chr "/root/.virtualenvs/r-reticulate:/root/.virtualenvs/r-reticulate"
$ pythonpath : chr "/usr/lib/python38.zip:/usr/lib/python3.8:/usr/lib/python3.8/lib-dynload:/root/.virtualenvs/r-reticulate/lib/pyt"| truncated
$ prefix : chr "/root/.virtualenvs/r-reticulate"
$ exec_prefix : chr "/root/.virtualenvs/r-reticulate"
$ base_exec_prefix : chr "/usr"
$ virtualenv : chr "/root/.virtualenvs/r-reticulate"
$ virtualenv_activate : chr ""
$ executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ base_executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ version_string : chr "3.8.10 (default, Nov 7 2024, 13:10:47) [GCC 9.4.0]"
$ version :Classes 'package_version', 'numeric_version' hidden list of 1
..$ : int [1:2] 3 8
$ architecture : chr "64bit"
$ anaconda : logi FALSE
$ conda : chr "False"
$ numpy :List of 2
..$ path : chr "/root/.virtualenvs/r-reticulate/lib/python3.8/site-packages/numpy"
..$ version:Class 'numeric_version' hidden list of 1
.. ..$ : int [1:3] 1 24 4
$ required_module : chr "saspy"
$ required_module_path: NULL
$ available : logi TRUE
$ python_versions : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ forced : NULL - attr(*, "class")= chr "py_config"
List of 22
$ python : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ libpython : chr "/usr/lib/python3.8/config-3.8-x86_64-linux-gnu/libpython3.8.so"
$ pythonhome : chr "/root/.virtualenvs/r-reticulate:/root/.virtualenvs/r-reticulate"
$ pythonpath : chr "/usr/lib/python38.zip:/usr/lib/python3.8:/usr/lib/python3.8/lib-dynload:/root/.virtualenvs/r-reticulate/lib/pyt"| truncated
$ prefix : chr "/root/.virtualenvs/r-reticulate"
$ exec_prefix : chr "/root/.virtualenvs/r-reticulate"
$ base_exec_prefix : chr "/usr"
$ virtualenv : chr "/root/.virtualenvs/r-reticulate"
$ virtualenv_activate : chr ""
$ executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ base_executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ version_string : chr "3.8.10 (default, Nov 7 2024, 13:10:47) [GCC 9.4.0]"
$ version :Classes 'package_version', 'numeric_version' hidden list of 1
..$ : int [1:2] 3 8
$ architecture : chr "64bit"
$ anaconda : logi FALSE
$ conda : chr "False"
$ numpy :List of 2
..$ path : chr "/root/.virtualenvs/r-reticulate/lib/python3.8/site-packages/numpy"
..$ version:Class 'numeric_version' hidden list of 1
.. ..$ : int [1:3] 1 24 4
$ required_module : chr "saspy"
$ required_module_path: NULL
$ available : logi TRUE
$ python_versions : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ forced : NULL - attr(*, "class")= chr "py_config"
List of 22
$ python : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ libpython : chr "/usr/lib/python3.8/config-3.8-x86_64-linux-gnu/libpython3.8.so"
$ pythonhome : chr "/root/.virtualenvs/r-reticulate:/root/.virtualenvs/r-reticulate"
$ pythonpath : chr "/usr/lib/python38.zip:/usr/lib/python3.8:/usr/lib/python3.8/lib-dynload:/root/.virtualenvs/r-reticulate/lib/pyt"| truncated
$ prefix : chr "/root/.virtualenvs/r-reticulate"
$ exec_prefix : chr "/root/.virtualenvs/r-reticulate"
$ base_exec_prefix : chr "/usr"
$ virtualenv : chr "/root/.virtualenvs/r-reticulate"
$ virtualenv_activate : chr ""
$ executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ base_executable : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ version_string : chr "3.8.10 (default, Nov 7 2024, 13:10:47) [GCC 9.4.0]"
$ version :Classes 'package_version', 'numeric_version' hidden list of 1
..$ : int [1:2] 3 8
$ architecture : chr "64bit"
$ anaconda : logi FALSE
$ conda : chr "False"
$ numpy :List of 2
..$ path : chr "/root/.virtualenvs/r-reticulate/lib/python3.8/site-packages/numpy"
..$ version:Class 'numeric_version' hidden list of 1
.. ..$ : int [1:3] 1 24 4
$ required_module : chr "saspy"
$ required_module_path: NULL
$ available : logi TRUE
$ python_versions : chr "/root/.virtualenvs/r-reticulate/bin/python"
$ forced : NULL - attr(*, "class")= chr "py_config"
[ FAIL 12 | WARN 0 | SKIP 0 | PASS 9 ]
══ Failed tests ════════════════════════════════════════════════════════════════
── Failure ('test-connection.R:4:3'): test connection ──────────────────────────
Expected sas_connect()
to run without any errors.
i Actually got a with text:
Python module saspy was not found.
Detected Python configuration:
── Failure ('test-connection.R:6:3'): test connection ──────────────────────────
Expected sas_connect("oda")
to run without any errors.
i Actually got a with text:
Python module saspy was not found.
Detected Python configuration:
── Failure ('test-connection.R:10:3'): test connection ─────────────────────────
Expected sas_disconnect()
to run without any errors.
i Actually got a <chk_error> with text:
No active SAS session. Use sas_connect() to start one.
── Failure ('test-connection.R:14:3'): test connection ─────────────────────────
sas_get_session()
did not throw the expected error.
── Error ('test-conversion.R:4:3'): SAS to R data.frame ────────────────────────
Error: Python module saspy was not found.
Detected Python configuration:
Backtrace:
▆
- ├─sasquatch::sas_connect() at test-conversion.R:4:3
- │ ├─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
- │ │ ├─base::tryCatch(...)
- │ │ │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
- │ │ └─base::force(expr)
- │ ├─.pkgenv$SASPy$SASsession
- │ └─reticulate:::
$.python.builtin.module
(.pkgenv$SASPy, "SASsession") - │ └─reticulate::py_get_attr(x, name, TRUE)
- └─reticulate (local)
<fn>
(<python.builtin.module>
)
── Error ('test-conversion.R:28:3'): R to SAS data.frame ───────────────────────
Error: Python module saspy was not found.
Detected Python configuration:
Backtrace:
▆
- ├─sasquatch::sas_connect() at test-conversion.R:28:3
- │ ├─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
- │ │ ├─base::tryCatch(...)
- │ │ │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
- │ │ └─base::force(expr)
- │ ├─.pkgenv$SASPy$SASsession
- │ └─reticulate:::
$.python.builtin.module
(.pkgenv$SASPy, "SASsession") - │ └─reticulate::py_get_attr(x, name, TRUE)
- └─reticulate (local)
<fn>
(<python.builtin.module>
)
── Error ('test-io.R:14:3'): uploading files to SAS ────────────────────────────
Error: Python module saspy was not found.
Detected Python configuration:
Backtrace:
▆
- ├─sasquatch::sas_connect() at test-io.R:14:3
- │ ├─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
- │ │ ├─base::tryCatch(...)
- │ │ │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
- │ │ └─base::force(expr)
- │ ├─.pkgenv$SASPy$SASsession
- │ └─reticulate:::
$.python.builtin.module
(.pkgenv$SASPy, "SASsession") - │ └─reticulate::py_get_attr(x, name, TRUE)
- └─reticulate (local)
<fn>
(<python.builtin.module>
)
── Error ('test-io.R:38:3'): download files from SAS ───────────────────────────
Error: Python module saspy was not found.
Detected Python configuration:
Backtrace:
▆
- ├─sasquatch::sas_connect() at test-io.R:38:3
- │ ├─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
- │ │ ├─base::tryCatch(...)
- │ │ │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
- │ │ └─base::force(expr)
- │ ├─.pkgenv$SASPy$SASsession
- │ └─reticulate:::
$.python.builtin.module
(.pkgenv$SASPy, "SASsession") - │ └─reticulate::py_get_attr(x, name, TRUE)
- └─reticulate (local)
<fn>
(<python.builtin.module>
)
── Error ('test-io.R:67:3'): removing files from SAS ───────────────────────────
Error: Python module saspy was not found.
Detected Python configuration:
Backtrace:
▆
- ├─sasquatch::sas_connect() at test-io.R:67:3
- │ ├─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
- │ │ ├─base::tryCatch(...)
- │ │ │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
- │ │ └─base::force(expr)
- │ ├─.pkgenv$SASPy$SASsession
- │ └─reticulate:::
$.python.builtin.module
(.pkgenv$SASPy, "SASsession") - │ └─reticulate::py_get_attr(x, name, TRUE)
- └─reticulate (local)
<fn>
(<python.builtin.module>
)
── Error ('test-io.R:93:3'): listing files ─────────────────────────────────────
Error: Python module saspy was not found.
Detected Python configuration:
Backtrace:
▆
- ├─sasquatch::sas_connect() at test-io.R:93:3
- │ ├─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
- │ │ ├─base::tryCatch(...)
- │ │ │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
- │ │ └─base::force(expr)
- │ ├─.pkgenv$SASPy$SASsession
- │ └─reticulate:::
$.python.builtin.module
(.pkgenv$SASPy, "SASsession") - │ └─reticulate::py_get_attr(x, name, TRUE)
- └─reticulate (local)
<fn>
(<python.builtin.module>
)
── Error ('test-run.R:6:3'): Run SAS code from string ──────────────────────────
Error: Python module saspy was not found.
Detected Python configuration:
Backtrace:
▆
- ├─sasquatch::sas_connect() at test-run.R:6:3
- │ ├─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
- │ │ ├─base::tryCatch(...)
- │ │ │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
- │ │ └─base::force(expr)
- │ ├─.pkgenv$SASPy$SASsession
- │ └─reticulate:::
$.python.builtin.module
(.pkgenv$SASPy, "SASsession") - │ └─reticulate::py_get_attr(x, name, TRUE)
- └─reticulate (local)
<fn>
(<python.builtin.module>
)
── Error ('test-run.R:22:3'): Run SAS code from file ───────────────────────────
Error: Python module saspy was not found.
Detected Python configuration:
Backtrace:
▆
- ├─sasquatch::sas_connect() at test-run.R:22:3
- │ ├─reticulate::py_capture_output(.pkgenv$session <- .pkgenv$SASPy$SASsession())
- │ │ ├─base::tryCatch(...)
- │ │ │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
- │ │ └─base::force(expr)
- │ ├─.pkgenv$SASPy$SASsession
- │ └─reticulate:::
$.python.builtin.module
(.pkgenv$SASPy, "SASsession") - │ └─reticulate::py_get_attr(x, name, TRUE)
- └─reticulate (local)
<fn>
(<python.builtin.module>
)
[ FAIL 12 | WARN 0 | SKIP 0 | PASS 9 ]
Error: Test failures
Execution halted
R CMD check generated the following check_fails:
- rcmdcheck_code_docs_mismatch
- rcmdcheck_tests_pass
Test coverage with covr
ERROR: Test Coverage Failed
Cyclocomplexity with cyclocomp
The following function have cyclocomplexity >= 15:
function | cyclocomplexity |
---|---|
configure_saspy | 16 |
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.77 |
Editor-in-Chief Instructions:
Processing may not proceed until the items marked with ✖️ have been resolved.
@ropensci-review-bot assign @thisisnic as reviewer |
@thisisnic added to the reviewers list. Review due date is 2025-05-14. Thanks @thisisnic for accepting to review! Please refer to our reviewer guide. rOpenSci’s community is our best asset. We aim for reviews to be open, non-adversarial, and focused on improving software quality. Be respectful and kind! See our reviewers guide and code of conduct for more. |
@thisisnic: If you haven't done so, please fill this form for us to update our reviewers records. |
Thanks for inviting me to be involved - my review is pasted below. Hope this is useful @ryanzomorrodi , and happy for any meta-feedback on the review itself @maurolepore! Package ReviewPlease check off boxes as applicable, and elaborate in comments below. Your review is not limited to these topics, as described in the reviewer guide
DocumentationThe package includes all the following forms of documentation:
Functionality
Estimated hours spent reviewing: 2.5
Review CommentsI did this review without reading any previous context above on the thread to try to remain as independent as possible in my reasoning, so there may be ideas duplicated here. Overall, I think this is an excellent package and provides useful functionality, which is well-documented. Most of the notes below are optional suggestions based on my subjective experience of trying out the package. The minimal changes I'd suggest incorporating are:
Running code examples in the READMESummary: looks great - a few suggestions below but feel free to treat them all as optional. I tried to set things up to try the package out myself, using the instructions in the README. I did feel a little uncomfortable entering in my SAS online password into the command line - I would have preferred to be given information about the config file and where it's stored to enter it there myself as that seems more typical of how other packages handle this kind of thing. The password remains in the R terminal unobscured after being entered, which isn't great security practice. When I went to configure it, the setup script asked "Which server is your account on?" with the following options:
Mine is "Europe 1" but I was unable to select this. This didn't prevent it from running in the end though. I also got this.
This confused me as, skimming, my instinct is to try to run Once I had done this and tried again with Java installed, it worked great! I would have liked to have the SAS code example from the animated gif in the code example so I could copy and paste it. I tried another example from the README
It took me a moment to understand that It'd also be handy to have it explained explicitly that this creates it as "mtcars" in the current SAS session - this wasn't clear to me and I had to check the docs to find this out.
As there is already a dataset in R called Overall, I found the instructions in the README clear enough to follow. Although I had a few small technical hiccups, it worked and I was impressed by being able to run SAS code in a Quarto markdown document. Running
|
@thisisnic thanks so much for your review! I love your approach of unpacking your user experience. |
@ropensci-review-bot submit review #673 (comment) time 2.5. |
Logged review for thisisnic (hours: 2.5.) |
@ryanzomorrodi we're still waiting for a second reviewer to accept and review. Please hold and plan to incorporate the feedback of both reviewers at once. |
Okay, sounds good. Thank you @thisisnic for all your feedback! |
@ropensci-review-bot add @tataphani as reviewer |
@tataphani added to the reviewers list. Review due date is 2025-05-25. Thanks @tataphani for accepting to review! Please refer to our reviewer guide. rOpenSci’s community is our best asset. We aim for reviews to be open, non-adversarial, and focused on improving software quality. Be respectful and kind! See our reviewers guide and code of conduct for more. |
@tataphani: If you haven't done so, please fill this form for us to update our reviewers records. |
@tataphani thanks for accepting this review. Please let me know any questions you have. |
got this email
…On Sun, May 4, 2025 at 3:08 PM Ryan Zomorrodi ***@***.***> wrote:
*ryanzomorrodi* created an issue (ropensci/software-review#673)
<#673>
Submitting Author Name: Ryan Zomorrodi
Submitting Author Github Handle: @ryanzomorrodi
<https://github.com/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: @maurolepore <https://github.com/maurolepore>
Reviewers: @thisisnic <https://github.com/thisisnic>, @tataphani
<https://github.com/tataphani>
Due date for @tataphani <https://github.com/tataphani>: 2025-05-25
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
***@***.***:
person("Ryan", "Zomorrodi", , ***@***.***", 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
<https://devguide.ropensci.org/softwarereview_policies.html#package-categories>
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).
- Are there other R packages that accomplish the same thing? If so,
how does yours differ or meet our criteria for best-in-category
<https://ropensci.github.io/dev_guide/policies.html#overlap>?
saquatch works similarly to packages like sasr
<https://sassoftware.github.io/saspy/> or configSAS
<https://github.com/baselr/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.
- (If applicable) Does your package comply with our guidance around *Ethics,
Data Privacy and Human Subjects Research*
<https://devguide.ropensci.org/policies.html#ethics-data-privacy-and-human-subjects-research>
?
N/A
-
If you made a pre-submission inquiry, please paste the link to the
corresponding issue, forum post, or other discussion, or @tag
<https://github.com/tag> the editor you contacted.
-
Explain reasons for any pkgcheck items
<https://docs.ropensci.org/pkgcheck/> 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.
- I have read the rOpenSci packaging guide
<https://devguide.ropensci.org/building.html>.
- I have read the author guide
<https://devdevguide.netlify.app/authors-guide.html> and I expect to
maintain this package for at least 2 years or to find a replacement.
This package:
- does not violate the Terms of Service of any service it interacts
with.
- has a CRAN and OSI accepted license.
- contains a README with instructions for installing the development
version <https://ropensci.github.io/dev_guide/building.html#readme>.
- includes documentation with examples for all functions, created with
roxygen2
<https://ropensci.github.io/dev_guide/building.html#documentation>.
- contains a vignette with examples of its essential functions and
uses. (this would need to be rendered locally)
- has a test suite
<https://ropensci.github.io/dev_guide/building.html#testing>.
- has continuous integration
<https://ropensci.github.io/dev_guide/ci.html>, including reporting of
test coverage.
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
<http://besjournals.onlinelibrary.wiley.com/hub/journal/10.1111/(ISSN)2041-210X/>?
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
<http://besjournals.onlinelibrary.wiley.com/hub/journal/10.1111/(ISSN)2041-210X/journal-resources/policy-on-publishing-code.html>
)
- (*Scope: Do consider MEE's Aims and Scope
<http://besjournals.onlinelibrary.wiley.com/hub/journal/10.1111/(ISSN)2041-210X/aims-and-scope/read-full-aims-and-scope.html>
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
- I agree to abide by rOpenSci's Code of Conduct
<https://ropensci.org/code-of-conduct/> during the review process and
in maintaining my package should it be accepted.
—
Reply to this email directly, view it on GitHub
<#673>, or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AI6QPUZZXAOGH7TCONFQNV324ZXT5AVCNFSM6AAAAABSASHW62VHI2DSMVQWIX3LMV43ASLTON2WKOZSGY3DSOJRGEZTGMY>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
@tataphani could you please summarize what the email says if you believe is relevant? Feel free to ask here anything that is unclear or that you can't find in our guide for reviewers. I'm also available via email or rOpenSci's Slack. |
@ryanzomorrodi: please post your response with Here's the author guide for response. https://devguide.ropensci.org/authors-guide.html |
got the access |
@ryanzomorrodi sorry about the confusing bot message. Please continue to wait until after @tataphani submits his review. Thanks for your patience. |
📆 @tataphani you have 2 days left before the due date for your review (2025-05-25). |
@tataphani the bot gently reminded us about your review. Could you please give us an estimate of when it would be ready? |
Yes, I am working on it. Just got very busy with the day Job , very sorry
for the delay . Just curious about the steps that I need to check other
things can I contact you on slack and have an extension of the date
…On Wed, May 28, 2025 at 7:34 PM Mauro Lepore ***@***.***> wrote:
*maurolepore* left a comment (ropensci/software-review#673)
<#673 (comment)>
@tataphani <https://github.com/tataphani> the bot gently reminded us
about your review. Could you please give us an estimate of when it would be
ready?
—
Reply to this email directly, view it on GitHub
<#673 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AI6QPU6C3BWFP3EICVD4W2L3AZI2JAVCNFSM6AAAAABSASHW62VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDSMJXHEYTENZYGQ>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
Thanks @tataphani for the update. Our dev guide has a chapter for reviewers It includes a template with a checklist for what to check Sure, feel free to reach out on slack. Yes, we have a bot command that allows us to set a new due date. How much longer do you think you would need? |
Something like 15 - 20days , ( Sorry day job has been very busy )
…On Thu, May 29, 2025 at 10:29 PM Mauro Lepore ***@***.***> wrote:
*maurolepore* left a comment (ropensci/software-review#673)
<#673 (comment)>
Thanks @tataphani <https://github.com/tataphani> for the update.
Our dev guide has a chapter for reviewers
https://devguide.ropensci.org/softwarereview_reviewer.html
It includes a template with a checklist for what to check
https://devguide.ropensci.org/reviewtemplate.html
Sure, feel free to reach out on slack.
Yes, we have a bot command that allows us to set a new due date. How much
longer do you think you would need?
—
Reply to this email directly, view it on GitHub
<#673 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AI6QPUZPFNFO2OBOUSHVQE33A7GC7AVCNFSM6AAAAABSASHW62VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDSMRRGEZDSNRYGI>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
@ropensci-review-bot set due date for @tataphani to 2025-06-20 |
Review due date for @tataphani is now 20-June-2025 |
Uh oh!
There was an error while loading. Please reload this page.
Submitting Author Name: Ryan Zomorrodi
Due date for @tataphani: 2025-06-20Submitting 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: @maurolepore
Reviewers: @thisisnic, @tataphani
Archive: TBD
Version accepted: TBD
Language: en
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.):
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.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 likesasr
orconfigSAS
.sasr
, while similar tosasquatch
, does not include interactive SAS functionality or aknitr
engine. On the other hand,configSAS
includes aknitr
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 theknitr
engine because I am struggling to think about how I can test that effectively. My assumption that the automatedpkgcheck
testing will fail due to the need forpython
, python packageSASPy
,java
, and a SAS License. (I have set up a CI that has all of these set up within thesasquatch
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
Code of conduct
The text was updated successfully, but these errors were encountered: