R/R Shiny:$运算符对于原子向量无效



每次使用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")])))

最新更新