每次使用read_excel加载.xlsx文件并将其传递到数据帧(比如命名数据(时,列标题都会得到"quot;插入其中。例如对于具有三列的.xlsx文件;水果1〃"水果2〃"水果3〃;将变成";水果"水果。2〃"水果;。为了删除这一点,我会使用以下代码-
colnames(data) <- trimws(gsub("."," ",colnames(data), fixed = TRUE))
但在Shiny应用程序中使用相同的方法,我使用fileInput按钮上传.xlsx文件,我无法使用这些列。示例-
fruits <- reactive({
req(input$file)
inFile <- input$file
if(is.null(inFile))
return(NULL)
fruits<-read_excel(paste(inFile$datapath, ".xlsx", sep=""), sheet = 1)
})
data <- reactive({
req(fruits())
data<-data.frame(fruits())
data<- data[2:nrow(data),]
colnames(data) <- trimws(gsub("."," ",colnames(data), fixed = TRUE))
})
if(any(is.na(data()[data()$"fruit 1" ==unique(data()$"fruit 1")[1],c("fruit 2","fruit 3")]))){
print("There are blank fruit 2/fruit 3 names")
}else{
print("There are no blank fruit 2/fruit 3 for the first batch")
}
我得到的错误是警告:$:$运算符中的错误对于if行的原子向量无效。有人能告诉我哪里出了问题吗。
该问题似乎与reactive
块中的return
有关,因为我们没有返回原始数据。最后一个表达式是对列名的赋值。
data <- reactive({
req(fruits())
data<-data.frame(fruits())
data<- data[2:nrow(data),]
colnames(data) <- trimws(gsub("."," ",colnames(data), fixed = TRUE))
data
})
关于其他情况,使用[[
进行子集设置可能比使用$
更好,因为$
不是通用的,即我们不能将对象传递给子集
tmp <- data()[["fruit 1"]]
if(any(is.na(data()[ tmp==unique(tmp)[1],c("fruit 2","fruit 3")])))