From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

class TestCase::R::OP::DataFrame {
use Array;
use R::OP::Int as IOP;
use R::OP::Double as DOP;
use R::OP::Matrix::Double as MDOP;
use R::OP::DataFrame as DFOP;
use R::OP::String as STROP;
use R::OP::Time::Piece as TPOP;
static method cbind : int () {
my $data_frame0 = R::DataFrame->new;
my $ndarray0_0 = IOP->c([1, 2]);
my $ndarray0_1 = IOP->c([3, 4]);
$data_frame0->insert_col("Name0_0", $ndarray0_0);
$data_frame0->insert_col("Name0_1", $ndarray0_1);
my $data_frame1 = R::DataFrame->new;
my $ndarray1_0 = IOP->c([5, 6]);
my $ndarray1_1 = IOP->c([7, 8]);
$data_frame1->insert_col("Name1_0", $ndarray1_0);
$data_frame1->insert_col("Name1_1", $ndarray1_1);
my $ret_data_frame = DFOP->cbind($data_frame0, $data_frame1);
unless ($ret_data_frame->ncol == 4) {
return 0;
}
unless ($ret_data_frame->col("Name0_0") == $ndarray0_0) {
return 0;
}
unless ($ret_data_frame->col("Name0_1") == $ndarray0_1) {
return 0;
}
unless ($ret_data_frame->col("Name1_0") == $ndarray1_0) {
return 0;
}
unless ($ret_data_frame->col("Name1_1") == $ndarray1_1) {
return 0;
}
unless ($ret_data_frame->col_by_index(0) == $ndarray0_0) {
return 0;
}
unless ($ret_data_frame->col_by_index(1) == $ndarray0_1) {
return 0;
}
unless ($ret_data_frame->col_by_index(2) == $ndarray1_0) {
return 0;
}
unless ($ret_data_frame->col_by_index(3) == $ndarray1_1) {
return 0;
}
# Exceptions
{
{
my $data_frame0 = R::DataFrame->new;
my $ndarray0_0 = IOP->c([1, 2]);
my $ndarray0_1 = IOP->c([3, 4]);
$data_frame0->insert_col("Name0_0", $ndarray0_0);
$data_frame0->insert_col("Name0_1", $ndarray0_1);
my $data_frame1 = R::DataFrame->new;
my $ndarray1_0 = IOP->c([5, 6]);
my $ndarray1_1 = IOP->c([7, 8]);
$data_frame1->insert_col("Name1_0", $ndarray1_0);
$data_frame1->insert_col("Name1_1", $ndarray1_1);
eval { DFOP->cbind($data_frame0, undef); }
unless ($@) {
return 0;
}
}
{
my $data_frame0 = R::DataFrame->new;
my $ndarray0_0 = IOP->c([1, 2]);
my $ndarray0_1 = IOP->c([3, 4]);
$data_frame0->insert_col("Name0_0", $ndarray0_0);
$data_frame0->insert_col("Name0_1", $ndarray0_1);
my $data_frame1 = R::DataFrame->new;
my $ndarray1_0 = IOP->c([5, 6]);
my $ndarray1_1 = IOP->c([7, 8]);
$data_frame1->insert_col("Name1_0", $ndarray1_0);
$data_frame1->insert_col("Name1_1", $ndarray1_1);
eval { DFOP->cbind(undef, $data_frame1); }
unless ($@) {
return 0;
}
}
{
my $data_frame0 = R::DataFrame->new;
my $ndarray0_0 = IOP->c([1, 2]);
my $ndarray0_1 = IOP->c([3, 4]);
$data_frame0->insert_col("Name0_0", $ndarray0_0);
$data_frame0->insert_col("Name0_1", $ndarray0_1);
my $data_frame1 = R::DataFrame->new;
my $ndarray1_0 = IOP->c([5, 6, 7]);
$data_frame1->insert_col("Name1_0", $ndarray1_0);
eval { DFOP->cbind($data_frame0, $data_frame1); }
unless ($@) {
return 0;
}
}
}
return 1;
}
static method rbind : int () {
{
my $data_frame0 = R::DataFrame->new;
my $ndarray0_0 = IOP->c([1, 2]);
my $ndarray0_1 = IOP->c([3, 4]);
$data_frame0->insert_col("Name0_0", $ndarray0_0);
$data_frame0->insert_col("Name0_1", $ndarray0_1);
my $data_frame1 = R::DataFrame->new;
my $ndarray1_0 = IOP->c([5, 6]);
my $ndarray1_1 = IOP->c([7, 8]);
$data_frame1->insert_col("Name0_0", $ndarray1_0);
$data_frame1->insert_col("Name0_1", $ndarray1_1);
my $ret_data_frame = DFOP->rbind($data_frame0, $data_frame1);
unless ($ret_data_frame->nrow == 4) {
return 0;
}
unless (Array->equals_int($ret_data_frame->col_by_index(0)->(R::NDArray::Int)->data, [1, 2, 5, 6])) {
return 0;
}
unless (Array->equals_int($ret_data_frame->col_by_index(1)->(R::NDArray::Int)->data, [3, 4, 7, 8])) {
return 0;
}
}
# Exceptions
{
{
my $data_frame0 = R::DataFrame->new;
my $ndarray0_0 = IOP->c([1, 2]);
my $ndarray0_1 = IOP->c([3, 4]);
$data_frame0->insert_col("Name0_0", $ndarray0_0);
$data_frame0->insert_col("Name0_1", $ndarray0_1);
my $data_frame1 = R::DataFrame->new;
my $ndarray1_0 = IOP->c([5, 6]);
my $ndarray1_1 = IOP->c([7, 8]);
$data_frame1->insert_col("Name0_0", $ndarray1_0);
$data_frame1->insert_col("Name0_1", $ndarray1_1);
eval { DFOP->rbind($data_frame0, undef); }
unless ($@) {
return 0;
}
}
{
my $data_frame0 = R::DataFrame->new;
my $ndarray0_0 = IOP->c([1, 2]);
my $ndarray0_1 = IOP->c([3, 4]);
$data_frame0->insert_col("Name0_0", $ndarray0_0);
$data_frame0->insert_col("Name0_1", $ndarray0_1);
my $data_frame1 = R::DataFrame->new;
my $ndarray1_0 = IOP->c([5, 6]);
my $ndarray1_1 = IOP->c([7, 8]);
$data_frame1->insert_col("Name0_0", $ndarray1_0);
$data_frame1->insert_col("Name0_1", $ndarray1_1);
eval { DFOP->rbind(undef, $data_frame1); }
unless ($@) {
return 0;
}
}
{
my $data_frame0 = R::DataFrame->new;
my $ndarray0_0 = IOP->c([1, 2]);
my $ndarray0_1 = IOP->c([3, 4]);
$data_frame0->insert_col("Name0_0", $ndarray0_0);
$data_frame0->insert_col("Name0_1", $ndarray0_1);
my $data_frame1 = R::DataFrame->new;
my $ndarray1_0 = IOP->c([5, 6]);
my $ndarray1_1 = IOP->c([7, 8]);
$data_frame1->insert_col("Name0_0", $ndarray1_0);
eval { DFOP->rbind($data_frame0, $data_frame1); }
unless ($@) {
return 0;
}
}
{
my $data_frame0 = R::DataFrame->new;
my $ndarray0_0 = IOP->c([1, 2]);
my $ndarray0_1 = IOP->c([3, 4]);
$data_frame0->insert_col("Name0_0", $ndarray0_0);
$data_frame0->insert_col("Name0_1", $ndarray0_1);
my $data_frame1 = R::DataFrame->new;
my $ndarray1_0 = IOP->c([5, 6]);
my $ndarray1_1 = IOP->c([7, 8]);
$data_frame1->insert_col("Name0_0", $ndarray1_0);
$data_frame1->insert_col("Name0_1_xxx", $ndarray1_0);
eval { DFOP->rbind($data_frame0, $data_frame1); }
unless ($@) {
return 0;
}
}
{
my $data_frame0 = R::DataFrame->new;
my $ndarray0_0 = IOP->c([1, 2]);
my $ndarray0_1 = IOP->c([3, 4]);
$data_frame0->insert_col("Name0_0", $ndarray0_0);
$data_frame0->insert_col("Name0_1", $ndarray0_1);
my $data_frame1 = R::DataFrame->new;
my $ndarray1_0 = DOP->c([(double)5, 6]);
my $ndarray1_1 = DOP->c([(double)7, 8]);
$data_frame1->insert_col("Name0_0", $ndarray1_0);
$data_frame1->insert_col("Name0_1", $ndarray1_0);
eval { DFOP->rbind($data_frame0, $data_frame1); }
unless ($@) {
return 0;
}
}
}
return 1;
}
static method subset : int () {
{
my $data_frame = R::DataFrame->new;
$data_frame->set_col("Name1", IOP->c([1, 2, 3]));
$data_frame->set_col("Name2", my $col2 = IOP->c([4, 5, 6]));
$data_frame->set_col("Name3", my $col3 = IOP->c([7, 8, 9]));
my $ret_col = $data_frame->col("Name2");
unless ($ret_col == $col2) {
return 0;
}
my $ret_data_frame = DFOP->subset($data_frame, IOP->c([1, 2]), {select => ["Name2", "Name3"]});
unless ($ret_data_frame is_type R::DataFrame) {
return 0;
}
unless (Array->equals_string($ret_data_frame->colnames, ["Name2", "Name3"])) {
return 0;
}
unless (Array->equals_int($ret_data_frame->col("Name2")->(R::NDArray::Int)->data, [5, 6])) {
return 0;
}
unless (Array->equals_int($ret_data_frame->col("Name3")->(R::NDArray::Int)->data, [8, 9])) {
return 0;
}
}
{
my $data_frame = R::DataFrame->new;
$data_frame->set_col("Name1", IOP->c([1, 2, 3]));
$data_frame->set_col("Name2", my $col2 = IOP->c([4, 5, 6]));
$data_frame->set_col("Name3", my $col3 = IOP->c([7, 8, 9]));
my $ret_col = $data_frame->col("Name2");
unless ($ret_col == $col2) {
return 0;
}
my $ret_data_frame = DFOP->subset($data_frame, IOP->c([1, 2]));
unless ($ret_data_frame is_type R::DataFrame) {
return 0;
}
unless (Array->equals_string($ret_data_frame->colnames, ["Name1", "Name2", "Name3"])) {
return 0;
}
unless (Array->equals_int($ret_data_frame->col("Name2")->(R::NDArray::Int)->data, [5, 6])) {
return 0;
}
unless (Array->equals_int($ret_data_frame->col("Name3")->(R::NDArray::Int)->data, [8, 9])) {
return 0;
}
}
# Exceptions
{
{
my $data_frame = R::DataFrame->new;
$data_frame->set_col("Name1", IOP->c([1, 2, 3]));
$data_frame->set_col("Name2", my $col2 = IOP->c([4, 5, 6]));
$data_frame->set_col("Name3", my $col3 = IOP->c([7, 8, 9]));
eval { DFOP->subset(undef, IOP->c([1, 2]), {select => ["Name2", "Name3"]}); }
unless ($@) {
return 0;
}
}
{
my $data_frame = R::DataFrame->new;
$data_frame->set_col("Name1", MDOP->matrix([(double)1, 2, 3, 4], 2, 2));
eval { DFOP->subset($data_frame, IOP->c([1, 2])); }
unless ($@) {
return 0;
}
}
}
return 1;
}
static method na_omit : int () {
{
# Create a R::DataFrame object
my $data_frame = R::DataFrame->new;
$data_frame->set_col("name", STROP->c(["Ken", "Yuki", "Mike", undef]));
$data_frame->set_col("age", IOP->c([19, 43, 50, 0]));
$data_frame->set_col("weight", DOP->c([(double)50.6, 60.3, Math->NAN, 80.5]));
$data_frame->set_col("birth", TPOP->c(["1980-10-10", undef, "1985-12-10", "1970-02-16"]));
my $ret_data_frame = DFOP->na_omit($data_frame);
unless ($ret_data_frame->ncol == 4) {
return 0;
}
unless ($ret_data_frame->nrow == 1) {
return 0;
}
unless ($ret_data_frame->col("name")->(R::NDArray::String)->data->[0] eq "Ken") {
return 0;
}
unless ($ret_data_frame->col("age")->(R::NDArray::Int)->data->[0] == 19) {
return 0;
}
unless ($ret_data_frame->col("weight")->(R::NDArray::Double)->data->[0] == 50.6) {
return 0;
}
unless ($ret_data_frame->col("birth")->(R::NDArray::Time::Piece)->to_string_ndarray->data->[0] eq "1980-10-10 00:00:00") {
return 0;
}
}
# Exceptions
{
{
# Create a R::DataFrame object
my $data_frame = R::DataFrame->new;
$data_frame->set_col("name", STROP->c(["Ken", "Yuki", "Mike", undef]));
$data_frame->set_col("age", IOP->c([19, 43, 50, 0]));
$data_frame->set_col("weight", DOP->c([(double)50.6, 60.3, Math->NAN, 80.5]));
$data_frame->set_col("birth", TPOP->c(["1980-10-10", undef, "1985-12-10", "1970-02-16"]));
eval { DFOP->na_omit(undef); }
unless ($@) {
return 0;
}
}
}
return 1;
}
}