Альтернатива dput (), cat () для сохранения вектора в глобальном env - PullRequest
1 голос
/ 14 апреля 2020

У меня есть несколько случаев, когда я пытаюсь сохранить вектор элементов в моей глобальной среде, чтобы иметь возможность использовать его для запроса базы данных или других последующих анализов.

Например, у меня есть нижеприведенный кадр данных , но на самом деле мои данные состоят из тысяч значений .

df:
example start   stop   range
set1    1       4180   1:4180
set2    460     499    460:499
set3    1       1127   1:1127
set4    1128    1622   1128:1622
set5    3741    3748   3741:3748

С этим фреймом данных я хочу захватить каждое целое число между началом и остановом, поэтому я хотел бы использовать столбец диапазона создать вектор каждого целого числа.

Я использовал:

cat(paste0(df$range, collapse = ", "))

, который затем печатает на консоль:

1:4180, 460:499, 1:1127, 1128:1622, 3741:3748

Затем я скопировал / вставил этот вывод, чтобы сохранить его как vector в моем глобальном окружении:

nums <- c(1:4180, 460:499, 1:1127, 1128:1622, 3741:3748)

Получив этот вектор, я могу выполнить дополнительный анализ, например:

> length(nums)
[1] 5850
> length(unique(nums))
[1] 4180
> summary(nums)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
      1     712    1443    1727    2726    4180

et c. et c.

Есть ли простой способ пропустить шаг копирования / вставки и сохранить желаемое форматирование как вектор напрямую?

1 Ответ

1 голос
/ 14 апреля 2020

Опция Map позволяет получить последовательность (:) между соответствующими значениями 'start', 'stop' и unlist list векторов в один вектор.

vec <- unlist(Map(`:`, df$start, df$stop))

Или, если мы хотим использовать столбец диапазона, eval использовать его

vec1 <- sapply(df$range, function(x) eval(parse(text = x)))
...