Я совсем новичок в Р. Я новичок.У меня есть следующий код, который я написал, который является частью гораздо большего R-скрипта, который мне пришлось изменить.Смысл изменения заключается в следующем:
Чтение в CSV-файле с двумя столбцами с именами «Имена проектов» и «Имена задач» - это источник правды
Затем уже существует файл CSV, загруженный исходным сценарием, и данные в этом файле CSV хранятся в tabIn.- Этот файл обновляется пользователем (-ями).Пользователь вводит имя проекта и имя задачи (среди прочего), а затем загружает файл CSV в блестящий
Моя цель здесь - прочитать в .csv из # 2 выше,Затем сравните выбранные имена проектов с именами задач.- Смысл этого состоит в том, чтобы убедиться, что имя задачи, указанное в файле .csv из # 2, принадлежит к тому же имени проекта в # 1 (источник правды).- Пользователи могут выбрать имя задачи, принадлежащей другому проекту.Смысл этого кода состоит в том, чтобы предотвратить это.- Если имя задачи из # 2 назначено неверному имени проекта, этот код должен предупредить.- Если имя задачи из # 2 вообще не существует в # 1 (источник правды), код также должен предупредить.
Когда я сам запускаю этот код в Rstudio.Работает без ошибок.Но когда я запускаю его в качестве оригинального скрипта, он выдает следующие ошибки:
"object of type 'closure' is not subsettable"
Ниже приведен код, который я написал и добавил в исходный скрипт:
# Get the list of valid projectnames and valid tasknames from the dynamic source of truth
taskNamesAndprojectNames <- read.table("/opt/task_name_controlled_vocabulary.tsv", header=TRUE, sep="\t")
allowedProjects <- taskNamesAndprojectNames[,1]
allowedTasks <- taskNamesAndprojectNames[,-1]
cmbPntn <- setNames(as.list(allowedProjects), allowedTasks)
##############################################################################################
# read in the .csv file which the user updates. #2 above. The person who wrote this script already read in the csv file into tabIn.
# i dont want to play with that variable so I duplicate it to tabInB.
tabInB <- tabIn
## split data.frame into name list of vectors
split <- split(tabInB, tabInB$project_name)
namedListManifest <- lapply(split, function(x){
as.character(x[["task_name"]])
})
##############################################################################################
for (projectTaskName in tabIn$task_name){
if(!grepl("^\\s*$", projectTaskName) && !grepl("string", projectTaskName )) {
# For each taskname in the user submitted manifest excel (#2), check which project name is assigned to it
projMatchChkUEM <- cmbPntn[[projectTaskName]]
# If you find a taskname that is not found in the source of truth tsv file, error out and inform the user.
if(is.null(projMatchChkUEM) || is.na(projMatchChkUEM) || grepl("^\\s*$", projMatchChkUEM)) {
dataResult <- paste("Task [", projectTaskName, "] is not a valid Task Name. If this is a new Task Name you wish to add, please contact John or Jane to add it to the sc1 source of truth.")
print(dataResult)
# this will cause the script to abort in the shiny UI
chkstatus <- 0
} else {
split <- split(taskNamesAndprojectNames, data$Project.Name)
#print(split)
## split data.frame into name list of vectors
namedList <- lapply(split, function(x){
as.character(x[["Task.Name.for.Manifest"]])
})
for (projName in tabIn$project_name){
#print(projectTaskName,projName)
if(!grepl("^\\s*$", projName) && !grepl("string", projName )) {
if(projectTaskName %in% namedListManifest[[projName]]) {
if (!(projectTaskName %in% namedList[[projName]])){
dataResult <- paste("Project [", projName, "] and Task [", projectTaskName, "] are incorrectly mapped! Check the [ sc1 ] source of truth file for the correct mappings!!!")
print(dataResult)
# this will cause the script to abort in the shiny UI
chkstatus <- 0
}
}
}
}
}
}
}