Details of the Script Editor


The Python service is currently running Python 3.9.2 (2021-02-19) The R service is currently running R 4.0.2 (2020-06-23)


The Senseforce Python service uses native python integration which makes it extremely reliable and highly performant. Up to 64 scripts can run concurrently. Any additional request above that number is being queued for later execution. Every executed script has its own thread with its own timeout set to 30 min.

In case you experience performance degradation please contact your Senseforce agent.

Data Input

Row Limit

For performance reasons, there is a limit of 5.000.000 rows per dataset that can be imported to the script editor. If you need more rows consider aggregating them prior to your script.

Data Types

When selecting a dataset for input the data type of the columns may change after importing. In the following, we will list the transformation to the data types which are available in R/Python.

Type of dataset column

Data Type R

Data Type Python






















Note, the Thing column is always a text column so it will be imported to the script editor as a factor vector if you are using R and not as a character vector.

Note, the Timestamp values are UNIX timestamps in milliseconds. Packages for handling timestamp usually expect a UNIX timestamp in seconds. If you are using such a package divide your timestamp by 1000.

Note, Numpy data types ( are automatically converted to native Python data types.

Exceptions: numpy.float128 and numpy.complex256 are going to be converted to String.

'numpy.bool_' --> 'bool' 'numpy.int8' --> 'int' 'numpy.uint8' --> 'int' 'numpy.int16' --> 'int' 'numpy.uint16' --> 'int' 'numpy.int32' --> 'int' 'numpy.uint32' --> 'int' 'numpy.int64' --> 'int' 'numpy.uint64' --> 'int' 'numpy.longlong' --> 'int' 'numpy.ulonglong' --> 'int' 'numpy.float16' --> 'float' 'numpy.float16' --> 'float' 'numpy.float32' --> 'float' 'numpy.float64' --> 'float' 'numpy.float128' --> 'numpy.float128' 'numpy.complex64' --> 'complex' 'numpy.complex128' --> 'complex' 'numpy.complex256' --> 'numpy.complex256'

Disabled operations in Python

The following commands are not allowed for security reasons:






Importing External Models or Data Frames

By importing .rds or .pickle files to your script you can use R or Python objects in the script.

Data Output

Data Types

Available data types are,

  • String

  • Long

  • Double

  • Timestamp

  • Integer

  • Boolean

With the result data type you define how the widget should interpret your results. So if you want time to be displayed in a dynamic format depending on the viewed time frame make your result a timestamp (unix timestamp in milliseconds). If you want a fixed time format you can transform them into a string and define them as such. If you want to use your values as a value for the y-axis they need to be numerical (long, integer or double). If you use factors (which represent strings) in R make sure to transform them to a character vector when assigning them to your result variable.


If you plan to use your results in a widget that only takes one value, like the single text widget, bar, or gauge chart, make sure the value you want to display is the first (or only) one in your results.

If the result is supposed to be used in a multi-chart using the auto-generated series feature and text on the x-axis the widget might display the data, not in the way you want it to. For more details please check the section about the widget editor.

Unit and Decimals

You can specify the unit of your result. Later you can use the unit to be displayed in your chart (e.g. in the legend). Decimals are only relevant for displaying results of type double. You can define how many digits are shown in the charts and widgets.

Comments in the Code

In R, you can use # to mark a line as a comment (or the end of a line).

In Python, you can use # (when the new Python Service is released to your tenant), or you can use single or triple " to mark a line as a comment sometimes.

Printing out variables in Python

You can print out a variable content, and check the result in the “Response Tab” of the browser.

Do not forget to delete or comment out all the print() statements after debugging otherwise your code won’t return a valid JSON.

Last updated