[R] How to insert a name from a list into a double loop
Giuseppa Cefalu
giu@epp@cef@lu @ending from gm@il@com
Wed Sep 12 23:06:44 CEST 2018
Hello,
The script below works well when I define the elementname <- list("name1",
"name2", "name3") . Please see program below.
SCRIPT
```
glyCount1 <- function(answer = NULL, fileChoice = NULL, combination = NULL,
enteredValue = NULL, nameList) {
lc <- enteredValue
choseDataFiles = TRUE
first_path <- NULL
new_path <- NULL
new_dataFns <- list()
new_dataFns <- as.list(unlist(strsplit(as.character(nameList), ",")))
file_content <- NULL
elementname <- list("name1", "name2", "name3")
for(i in 1:length(lc)){
for(j in 1:length(lc[[i]])){
first_path[j]<- paste(getwd(), "/", lc[[i]][j], sep = "")
print(first_path[j])
# file_content[[j]] <- read.csv(file = first_path[[i]], header =
TRUE, sep = ",")
for(k in 1:length(elementname)){
if(k == i){
new_path[j] <- paste(getwd(),"/", i, elementname[k], ".csv", sep
= "")
print (new_path[j])
}
}
}
}
}
```
SCRIPT OUTPUT:
[1] "/home/giuseppa/Development/glycoPipeApp/1name1.csv"
[1] "/home/giuseppa/Development/glycoPipeApp/1name1.csv"
[1] "/home/giuseppa/Development/glycoPipeApp/1name1.csv"
[1] "/home/giuseppa/Development/glycoPipeApp/1name1.csv"
[1] "/home/giuseppa/Development/glycoPipeApp/2name2.csv"
[1] "/home/giuseppa/Development/glycoPipeApp/2name2.csv"
[1] "/home/giuseppa/Development/glycoPipeApp/2name2.csv"
[1] "/home/giuseppa/Development/glycoPipeApp/3name3.csv"
[1] "/home/giuseppa/Development/glycoPipeApp/3name3.csv"
However, If instead of using the list "elementname" I call the script
through an app and I enter the list of names through a textbox, which then
is passed to the glycoPipe1 function. Please see below. The same script
does not return the expected output.
'new_dataFns <- list()
new_dataFns <- as.list(unlist(strsplit(as.character(nameList), ","))) is
used in the script when the value passed to the function by the app's
textinput (nameList) is used, in which case I would substitute the
elementname list buythe new_dataFns list, please see block code below.
BLOCK OF CODE
```
for(i in 1:length(lc)){
for(j in 1:length(lc[[i]])){
first_path[j]<- paste(getwd(), "/", lc[[i]][j], sep = "")
print(first_path[j])
# file_content[[j]] <- read.csv(file = first_path[[i]], header =
TRUE, sep = ",")
for(k in 1:length(elementname)){
if(k == i){
new_path[j] <- paste(getwd(),"/", i, elementname[k], ".csv", sep
= "")
print (new_path[j])
}
}
}
```
I am sending the app below just in case you need it. but I wonder if it
has to do with the list:
new_dataFns <- as.list(unlist(strsplit(as.character(nameList), ","))) . It
seams that elementname a new_dataFns do not work in the same way in the
script.
Am I am building the new_dataFns list incorrectly?. It seems as if the
values could not be accessed.
Thank you for your help
APP PROGRAM
```
library(shiny)
library(shinyjs)
ui <- fluidPage(
selectInput("combinefiles", label = h5(strong("Do you wish to combine any
data files, and compare the combined data sets? (Y/N) ")),
choices = c("", "Y", "N"),selected = NULL),
verbatimTextOutput("combiningFiles"),
verbatimTextOutput("combineChosen"),
#verbatimTextOutput("filesToCombine"),
useShinyjs(),
conditionalPanel(
condition = "output.toCombine > '0'",
selectInput(inputId = "select",label = h5(strong("Please select from
the list")), choices = c(Chose = "",
list.files("~/Development/glycoPipeApp")), multiple = TRUE, selectize =
TRUE)
),
conditionalPanel(
condition = "output.displayAddButton > '0'",
actionButton('add','Add')
),
verbatimTextOutput("samelist"),
conditionalPanel(
condition = "output.displayAddButton == 1",
actionButton("sBtn", "Press the save button to end")
),
conditionalPanel(
condition = "output.displayTheSaveButton > '0'",
textInput("textbox", h5(strong("Please enter name/s to designate
combined set/s separated by comma")))),
strong(verbatimTextOutput("list")),
verbatimTextOutput("caption")
)
#selections = NULL,
glycoPipe <- function(response = NULL, fOfData = NULL, combineResult =
NULL, listContents = NULL, vals = NULL){
enteredValue = NULL
nameList = NULL
answer = NULL
fileChoice = NULL
combination = NULL
combinations = NULL
comb = NULL
nameListSize = NULL
choseDataFiles = NULL
if(!is.null(response)){
answer = response
}
if(!is.null(fOfData)){
fileChoice = fOfData
}
if(!is.null(combineResult)){
combination = combineResult
}
if(!is.null(listContents)){
enteredValue = listContents
}
if(!is.null(vals)){
nameList <- vals
}
glyCount1(answer, fileChoice, combination, enteredValue, nameList)
}
server <- function(input, output, session){
listContents = NULL
source("Utilities/utilities.R")
source("glycoPipeFunctions/glycoPipe_fcns.R")
source("glyCount1.R")
output$toCombine <- reactive({
req(input$combinefiles)
return(length(input$combinefiles))
})
outputOptions(output, "toCombine", suspendWhenHidden = FALSE)
output$displayAddButton <- reactive({
req(input$combinefiles)
return(length(input$combinefiles))
})
outputOptions(output, "displayAddButton", suspendWhenHidden = FALSE)
output$displayTheSaveButton <- reactive({
req(input$sBtn)
return(input$sBtn)
})
outputOptions(output, "displayTheSaveButton", suspendWhenHidden = FALSE)
myValues <- reactiveValues()
observe({
if(input$add > 0){
myValues$dList <- c(isolate(myValues$dList),
isolate(list(input$select)))
}
})
# #unlist(input$filescombine)
output$samelist<-renderPrint({
#listContents <- list()
listContents <- append(listContents, myValues$dList)
print(listContents)
if(input$sBtn > 0){
numberOfSelectedSets <- glycoPipe(response = NULL, fOfData = NULL,
combineResult = NULL , listContents)
paste("Please enter", numberOfSelectedSets$nameListSize, "names to
designate your", numberOfSelectedSets$nameListSize, "sets")
}
})
VALUES <- list()
observe({
isolate({
req(input$textbox)
VALUES <- input$textbox
VALUES <- append(VALUES, list(input$textbox))
updateTextInput(session, inputId = "textbox", value = VALUES)
})
})
output$caption <- renderPrint({
vals <- list()
vals <- append(vals, input$textbox)
if(input$sBtn > 0){
result <- glycoPipe(response = NULL, fOfData = NULL, combineResult
= NULL, listContents = NULL, vals)
#unlist(input$filescombine)
}
})
session$allowReconnect(TRUE)
}
shinyApp(ui = ui, server = server)
```
[[alternative HTML version deleted]]
More information about the R-help
mailing list