我有一个驻留在包中的函数,假设该函数称为foo()
。我希望它读取带有希腊字母的Excel文件,因此将语言环境更改为希腊语。读完数据文件后,我对该数据和希腊字符进行了处理,然后希望将语言环境更改回默认值。
foo <- function(file, sheet){
Sys.setlocale(category = "LC_ALL", locale = "Greek")
data <- read.xlsx(file, sheet)
cols_greek <- names(data)[which(apply(data, 2, function(x) grepl("α|β|σ|ε|γ|π|δ|θ|λ|χ|μ|°", x)), arr.ind = TRUE)[,2]]
cols_greek <- cols_greek[!duplicated(cols_greek)]
Sys.setlocale()
return(cols_greek)
}
很好看...但是当代码位于foo
函数内部时,它将无法正常工作。包含希腊字符的列未正确返回。像这样运行代码
Sys.setlocale(category = "LC_ALL", locale = "Greek")
data <- read.xlsx("file.xlsx", sheet = "data")
cols_greek <- names(data)[which(apply(data, 2, function(x) grepl("α|β|σ|ε|γ|π|δ|θ|λ|χ|μ|°", x)), arr.ind = TRUE)[,2]]
cols_greek <- cols_greek[!duplicated(cols_greek)]
Sys.setlocale()
cols_greek
可以正常工作,并返回正确的列名称。谁能告诉我为什么呢?
任何帮助将不胜感激。