Генерация вложенных таблиц в R - PullRequest
0 голосов
/ 14 сентября 2018

Мне нужно перевести некоторый код Python на R. Что мне нужно сделать, так это несколько раз выбрать случайные строки из большой таблицы, чтобы я мог использовать это позже.Вот иллюстрация:

library(data.table)
library(dplyr)

test_table <- data.table(replicate(10, sample(0:1, 10, rep=TRUE)))
test_table

Дает таблицу 10 x 10, заполненную (при некотором конкретном прогоне):

Full table

Например, можно получить образец:

sample <- sample_n(test_table, 2)
sample

, который может выглядеть следующим образом:

A particular sample

Однако я непонять результат при взятии нескольких образцов:

kSampleSize <- 2
kNumSamples <- 3

samples <- replicate(kNumSamples, sample_n(test_table, kSampleSize))
samples

может дать:

Samples

Но на самом деле это не похоже наmsgstr "список sample".Я ожидал, что samples[1] даст результат, аналогичный sample, но вместо этого я получу странный результат (меняется в зависимости от пробега):

1. 1 0

Я что-то не так делаю?Я неправильно понимаю вывод?Ожидает ли "список из sample" чего-то ожидать в Python, но не в R?

1 Ответ

0 голосов
/ 15 сентября 2018

В replicate есть аргумент simplify, который определяет, пытается ли R упростить возвращаемый объект до менее сложной структуры данных.

simplify по умолчанию TRUE, и в этом случае он сворачивает возвращенный список фреймов данных в один объект типа list. Указание simplify = FALSE отключает это поведение.

kSampleSize <- 2
kNumSamples <- 3

replicate(kNumSamples, sample_n(test_table, kSampleSize), simplify = FALSE)

Возвращает список из трех фреймов данных, сохраняя исходную структуру данных:

[[1]]
   V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1:  1  0  0  0  1  0  0  1  0   1
2:  1  1  1  0  0  1  0  0  1   1

[[2]]
   V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1:  1  1  0  1  0  1  0  1  0   0
2:  1  1  1  1  1  0  0  1  0   1

[[3]]
   V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1:  0  0  1  0  1  1  0  0  1   1
2:  1  1  1  1  0  0  1  0  0   0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...