r - R/R Shiny:$ 运算符对原子向量无效
问题描述
每次我使用 read_excel 加载 .xlsx 文件并将其传递到数据框(比如说命名数据)时,列标题都会得到“。” 插入其中。例如,对于具有三列“fruit 1”、“fruit 2”、“fruit 3”的 .xlsx 文件,将变为“fruit.1.”、“fruit.2.”、“fruit.3.”。为了删除它,我将使用以下代码 -
colnames(data) <- trimws(gsub("."," ",colnames(data), fixed = TRUE))
但是在我使用 fileInput 按钮上传 .xlsx 文件的 Shiny 应用程序中使用相同的方法,我无法使用这些列。例子 -
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 行的原子向量无效。有人可以告诉我哪里出错了。
解决方案
这个问题似乎与return
fromreactive
块有关,因为我们没有返回原始数据。最后一个表达式是对列名的赋值。
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")])))
推荐阅读
- css - 如何将弹出窗口放在网格线和文本上方?
- python-3.x - Errno 22 无效参数:'F:\\Python\\Library\\resources\\icudtl.dat'
- listview - viewpager 作为列表视图标题
- c# - 在浏览器中出现以下错误
- r - 给定开始月份和结束月份的每个月扩展表的R函数
- objective-c - Swift 文档未在 Objective C 中显示
- c - 如何访问动态向量的元素?
- python - 最近,Python 的 Fire 云消息传递 SDK 返回错误“未找到请求的实体”。
- python - 错误:需要 Microsoft Visual C++ 9.0
- c++ - 使用优化标志编译时线程不启动