学习R和can中的循环';t抽出一个特定的变量

学习R和can中的循环';t抽出一个特定的变量,r,csv,for-loop,R,Csv,For Loop,在学习Python一段时间后,我很难理解R中的循环。我想做的是从该代码返回的CSV文件向量中取出$NORTOR或$SOFTABLE: getpollutant <- function(id=1:332, directory, pollutant) { data<-c() for (i in id) { data[i]<- c(paste(directory, "/",formatC(i, width=3, flag

在学习Python一段时间后,我很难理解R中的循环。我想做的是从该代码返回的CSV文件向量中取出$NORTOR或$SOFTABLE:

getpollutant <- function(id=1:332, directory, pollutant) {
        data<-c()
        for (i in id) {
                data[i]<- c(paste(directory, "/",formatC(i, width=3, flag=0),".csv",sep=""))     
        }
        df<-c()
        for (d in 1:length(data)){ df[[d]]<-c(read.csv(data[d]))

        }
        df               
}

显然,这是输出的一个非常小的版本,但基本上它接受指定范围id中的CSV文件,并按如下方式打印出来…

您只想从文件中读取特定列吗?您是否知道它是按编号排列的哪一列(例如第三列)?在这种情况下,您可以使用
colClasses
参数来
read.table
/
read.csv
指定只读取给定列

如果您不知道该列提前出现,则可能需要读取整个文件,然后只返回给定的列。在这种情况下,您可能希望使用
[[]]
子集而不是
$
子集

通过使用
sprintf
lappy
sapply
,您还可以使代码更紧凑,可能更高效

考虑以下代码:

lapply(1:332, function(id) {
  read.csv( sprint("%s/%03d.csv", directory, id )
})


这是为Coursera课程“R编程”准备的吗?你能举一个小的、可重复的例子吗?@Jaap是的,我意识到我上周落后了。在我继续之前试着理解…欢迎来到StackOverflow。请阅读有关如何以及如何制作广告的信息。您可能还想阅读“您也可以在此网站上搜索“[r]污染物”,以查看人们针对此作业提出/回答的所有其他问题。我感谢您的回答,但这超出了我在r中的范围。我刚刚开始编写函数,我正试图了解for循环的工作原理。这种语言比python要神秘得多,所以我真的很想在插入我不懂的代码之前了解一些基本知识。我确实知道我想读哪一列,所以我将返回并查看colClasses参数,看看是否可以回过头来看看it@user3653647,好的,把这个代码放在后面,直到你准备好为止。使用
colClasses
可以给出一个元素数与数据中列数相同的向量,向量中
NULL
的任何元素都意味着跳过文件中相应的列。
lapply(1:332, function(id) {
  read.csv( sprint("%s/%03d.csv", directory, id )
})
sapply( list.files(directory, pattern='\\.csv$',full.names=TRUE), 
  function(nm) read.csv(nm)[[pollutant]] )