【发布时间】:2020-09-18 03:04:54
【问题描述】:
我正在尝试在 R 中使用 for 循环放入多张 excel 表并进行一些估算。我写的代码如下,
sheet <- getSheetNames("market_latest.xlsx")
for (i in 2:length(sheet)-1){
data[i] <- read.xlsx("market_latest.xlsx",sheet = sheet[i],fillMergedCells = TRUE)
col[i] <- colnames(data[i])
colnames(data[i]) <- as.character(unlist(data[i][1,]))
col[i+1] <- colnames(data[i])
colnames(data[i]) <- as.character(unlist(data[i][1,]))
data[i] <- data[i][, !duplicated(colnames(data[i]))]
write.xlsx(data[i],file="sampleop.xlsx",sheetName="Sheet1",
col.names=TRUE, row.names=FALSE, append=FALSE)
}
插补部分正在工作,所以我没有问题。但是当我运行代码时,它会向我发出警告但没有输出。我想使用 2 张到 n-1 张 excel,请让我知道我哪里错了。 错误图片添加在下面。 enter image description here
【问题讨论】:
-
欢迎来到 SO!这个问题缺少很多的信息,所以它不太可能对你有任何成果,Aditya hande。您说:“它向我发出警告但没有输出” ...也许您可以与我们分享这些警告?它们几乎可以肯定地表明或与您可能遇到的任何问题有关。缺少这一点,我们没有警告、错误和样本数据,所以任何人都不太可能给你太多。参考:stackoverflow.com/q/5963269、minimal reproducible example 和 stackoverflow.com/tags/r/info。
-
:优先于-。将for (i in 2:length(sheet)-1)更改为for (i in 2:(length(sheet)-1))。查看2:5 - 1和2:(5 - 1)之间的区别以获取说明。 -
@GregorThomas 嗨,感谢您的输入,我已经尝试过了,但它的抛出错误。错误是“闭包”类型的“对象”不是子集。请查看我在问题中添加的错误。
-
当你使用像变量这样的函数名时,这是一个常见的错误。就像,
mean是一个函数名,如果我这样做mean[1],则会出现该错误,因为我无法子集函数。但是如果我先说mean = 1:3,那么有一个非函数均值,那么mean[1]有效。所以可能当您执行data[i]时,您没有名为data的对象,因此R 尝试使用内置函数data()代替。也许在循环开始之前放一个data = list()来创建一个数据对象。您还应该将data[i]更改为data[[i]]- 使用双括号来访问列表的单个元素。 -
@GregorThomas 非常感谢它确实有帮助:)。我也添加了我的答案。
标签: r for-loop readxl openxlsx