Разрешение пользователю выбирать из списка файлов, а не вводить путь к файлу в R (или другие средства, которые могут передавать файл в R) - PullRequest
1 голос
/ 15 июля 2010

У меня есть сценарий BATCH (на компьютере Windows, который бы хотел, чтобы это было обобщено во времени), который открывает и запускает следующий код в фоновом режиме:

library(svDialogs)
library(ggplot2)
library (XML)
sharesID <- display(guiDlg("SciViews-R", "Please Enter Shares ID:"))
test.df <- xmlToDataFrame(sharesID)
test.df
sapply(test.df, class) 
test.df$timeStamp <- strptime(as.character(test.df$timeStamp), "%H:%M:%OS")
test.df$Price <- as.numeric(as.character(test.df$Price))
sapply(test.df, class)
options("digits.secs"=3)
summary (test.df)
with(test.df, plot(timeStamp, Price))
sd (test.df$Price)
mean(test.df$timeStamp)
test.df$timeStamp <- test.df[1,"timeStamp"] + cumsum(runif(7)*60)
summary(test.df)
qplot(timeStamp,Price,data=test.df,geom=c("point","line"))
Price <- summary(test.df$Price)
print (Price)

Когда дело доходит до sharesID <- отображение (guiDlg («SciViews-R», «Пожалуйста, введите идентификатор общего ресурса:»)) Появляется диалоговое окно с просьбой ввести идентификатор общего ресурса. В настоящее время вы должны использовать полный путь к файлу, который вы хотите выполнить для остальной части кода. Есть ли способ, которым вы можете ввести номер файла из списка файлов, хранящихся в базе данных или тому подобное. </p>

Другой вопрос, который у меня возникает, заключается в том, что он генерирует PDF-файл только для обоих графиков. Хотя мне это нравится, есть способ указать тип и местоположение вывода (например, в виде графика на веб-странице).

Я хочу включить распечатку сводки цены в вывод, но это не достигается с помощью вышеуказанных команд.

Ответы [ 2 ]

2 голосов
/ 16 июля 2010

Я никогда раньше не видел пакет svDialogs, но он выглядит довольно круто.Оставаясь в базе R, тогда, может быть, вам нужно что-то вроде этого (или, по крайней мере, возможно, это вызовет идею);просто скопируйте и вставьте, это автономный пример:

# set up the relations between file paths and the file names you want
f.names <- c("file_01", "file_02", "file_03")
f.paths <- c("C:\\text01.txt", "C:\\text02.txt", "C:\\text03.txt")

# ask the user to select one of your specified file names
choice <- select.list(choices = f.names, title = "Please Select Shares ID:")

# return the full file path based on the file name selected by the user
index <- grep(choice, f.names, fixed = TRUE)
sharesID <- f.paths[index]

Выше появится диалоговое окно с вариантами выбора файлов, как вы сами.Затем пользователь выбирает один из вариантов, и, в конце концов, вы получите полный путь к файлу:

> sharesID 
[1] "C:\\text01.txt"

Надеюсь, что это поможет маленькому товарищу,

Tony Breyal

0 голосов
/ 17 июля 2010

Я обращаюсь ко второму желанию - веб-странице графика. Вот шаблон того, как вы можете использовать gWidgetsWWW для этого. Вы можете использовать этот пакет локально с помощью команды localServerStart () (он использует веб-сервер страницы справки). Если вы сохраните следующее в некоторый файл, скажем, «makeGraph.R», то загрузите его из R с помощью localServerStart («makeGraph.R») (при условии, что вы находитесь в правильном каталоге, в противном случае добавьте свою информацию):

<code>require(ggplot2)


## a simple web page
w <- gwindow("Make a neat graph")
g <- ggroup(cont=w, horizontal=FALSE)
glabel("Select a  data frame to produce a graph", cont=g)
cb <- gcombobox(names(mapNameToFile), selected=-1, cont=g)
f <- gframe("Summary", cont=g)
t <- ghtml("", cont=g)
f <- gframe("Plot", cont=g)
ourDevice <- gsvg(width=500, height=500, cont=f)

addHandlerChanged(cb, handler=function(h,...) {
  makePlot(svalue(h$obj))
})

visible(w) <- TRUE

## Below here you must change to suit your application:
## example of map from names to some other object
mapNameToFile <- list("mtcars"=mtcars,
                      "CO2" = CO2)
## your main function
makePlot <- function(nm) {
  df <- mapNameToFile[[nm]]
  if(is.null(df)) {
    galert(sprintf("Can't find file %s", nm))
    return()
  }
  ## your plot
  p <- qplot(df[,1], df[,2])
  ## put into svg device
  f <- getStaticTmpFile(ext=".svg")
  require(RSVGTipsDevice, quietly=TRUE, warn=FALSE)
  devSVGTips(f)
  print(p)
  dev.off()
  svalue(ourDevice) <- f
  ## write a summary
  svalue(t) <- paste("<pre>",
                     paste(capture.output(summary(df)), collapse="<br>"),
                     "
», Сентябрь = "") }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...