R;如何在循环中使用与 i 连接的 variable/dataset

R; How to use a variable/dataset which is concatenated with an i, in a loop

我不太擅长R,很抱歉这个笨拙的问题。

我有大量不同的数据集。我想使用一个循环来加载所有这些并进行一些清理。 我还需要稍后通过聚类分析运行它们。

我要对 1 个文件执行的操作:

data1 <- read.table("Datasæt Pris 1.csv", 
                 header = TRUE,
                 sep = "|")
rownames(data1) = data1$LPERMNO
data1$LPERMNO = NULL
data1<-data1[, colSums(is.na(data1)) != nrow(data1)]
data1[is.na(data1)] <- 0

所以第一部分我找到了一种方法,很有效!:

for (i in 42:44){
assign(paste0("Data", i), read.table(paste("Datasæt Pris ",i,".csv",sep = ""), 
                                       header = TRUE,
                                       sep = "|"))
}

但是我介绍下一步的时候,还是不行。 我已经尝试了 get()、assign()、cat()、paste()、eval() 的一百万种不同变体。 作为一个例子,我试过:

for (i in 42:44){
assign(paste0("Data", i), read.table(paste("Datasæt Pris ",i,".csv",sep = ""), 
                                       header = TRUE,
                                       sep = "|"))
  rownames(cat("Data", i, sep="")) = cat("Data", i, "$LPERMNO",sep="")
  cat("Data", i, "$LPERMNO",sep="") = NULL
}

我得到的错误是:Data42$LPERMNOFejl i rownames(cat("Data", i, sep = "")) = cat("Data", i, "$LPERMNO", : 赋值目标扩展为非语言对象

我已经阅读了我能找到的所有主题。但是我比较着急,5月17日要交论文,我几乎到了每一步都要手动的地步了。

但我认为我的最后一次尝试是 post 在这里提问,希望我的问题是可以理解的!

此致

埃米莉

这通常是使用众多应用函数之一完成的。这些收集每次迭代的输出,return 供您收集。 lapply 非常适合这个。它会创建一个列表,列出每次迭代产生的任何内容。


list.with.data.sets <- lapply( 42:44, function(i) {
    data1 <- read.table(paste("Datasæt Pris ",i,".csv",sep = ""),
                        header = TRUE,
                        sep = "|")
    rownames(data1) = data1$LPERMNO
    data1$LPERMNO = NULL
    data1 <- data1[, colSums(is.na(data1)) != nrow(data1) ]
    data1[is.na(data1)] <- 0
    return( data1 )
})

combined.data <- do.call( rbind, list.of.data.sets )

## if you have dplyr:
library(dplyr)
combined.data <- bind_rows( list.of.data.sets )

如果您需要 运行 单独对它们进行聚类分析,而不是一大堆,然后使用 lapply:

再次处理它们

your.clusters <- lapply( list.with.data.sets, function(d) {
    cluster <- cluster.analysis.one.way.or.another(d)
    return( cluster )
})

等..等...整个想法是使用数据集列表而不是动态生成的变量名进行操作。