Выведите вектор в R в том же формате, который используется для ввода его в R
Возможно, я представляю это, но я думаю, что есть встроенная функция R, которая позволяет печатать вектор R (и, возможно, другие объекты, такие как матрицы и кадры данных) в том формате, который вы использовали бы для ввода этого объекта (возвращаемого как строка). Например,
> x <- c(1,2,3)
> x
[1] 1 2 3
> magical.function(x)
"c(1,2,3)"
Существует ли эта функция?
Ответы
Ответ 1
dput
может быть?
> test <- c(1,2,3)
> dput(test)
c(1, 2, 3)
Вы также можете dump
несколько объектов за один проход в файл, который написан в вашем рабочем каталоге:
> test2 <- matrix(1:10,nrow=2)
> test2
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
> dump(c("test","test2"))
dumpdata.r
затем будет содержать:
test <-
c(1, 2, 3)
test2 <-
structure(1:10, .Dim = c(2L, 5L))
Ответ 2
Я решил добавить это решение слишком, потому что обнаружил, что dput()
не работает для того, что я пытался сделать. У меня есть shiny
приложение, которое использует knitr
для создания отчетов на основе пользовательского сеанса, и я использую knit_expand()
прежде чем передавать свой.Rmd для вывода параметров пользователя из блестящей сессии в.Rmd.
Не вдаваясь в подробности, мне нужно переносить векторы "как есть", потому что они будут записаны в строки кода в.Rmd, которые кто-то будет запускать. В этом случае dput()
не работала, потому что вывод был только плюем на консоль, а метод dump()
работает, но я не хотел писать новые файлы каждый раз и удалять их.
Может быть, лучший способ, но я написал функцию, которая возвращает объект символа вектора "как есть". Он обрабатывает как числовые, так и символьные векторы (он выдает кавычки вокруг каждого члена символьного вектора). Он также обрабатывает отдельные входы и просто возвращает их, как они есть. Это не очень, и я уверен, что есть более эффективные способы написать его, но он отлично работает для моих нужд. Думал, я бы добавил это решение в драку.
printVecAsis <- function(x) {
ifelse(length(x) == 1, x,
ifelse(is.character(x), paste0("c(", paste(sapply(x, function(a) paste0("\'",a,"\'")), collapse=", "), ")"),
paste0("c(", paste(x, collapse=", "), ")")))}