R访问数据帧:什么&x27;这是怎么回事?

R访问数据帧:什么&x27;这是怎么回事?,r,lubridate,R,Lubridate,对R来说是新的,所以可能是一个noob问题。考虑下面的代码,特别是for循环: library(lubridate) #Read in all site files in the directory sitefiles <- list.files(pattern = "\\.csv$") #Get a list of all csv's in dir sites <- list() #Create an empty l

对R来说是新的,所以可能是一个noob问题。考虑下面的代码,特别是for循环:

library(lubridate)
#Read in all site files in the directory
sitefiles <- list.files(pattern = "\\.csv$")   #Get a list of all csv's in dir
sites <- list()                                #Create an empty list.
sites <- lapply(sitefiles, read.csv)          
names(sites) <- gsub("\\.csv$", "", sitefiles)  #Rename the list

for (site in names(sites)){
  site$time <-  dmy_hms(site$timestamp)
      #Error: $ operator is invalid for atomic vectors
}
库(lubridate)
#读入目录中的所有站点文件

sitefiles我找不到这方面的任何源代码,但在本地对其进行测试时,for循环似乎正在创建您正在迭代的列表中项目的本地副本。也许这就是为什么建议迭代
名称
,或者更确切地说是
应用

> a <- list(mtcars$cyl)
> b <- list(mtcars$mpg)
> x <- c(a, b)
> tracemem(a)
[1] "<0000000014731C68>"
> tracemem(b)
[1] "<00000000147711D8>"
> for(myList in x) { print(tracemem(myList)) }
[1] "<000000000C37E650>"
[1] "<00000000096AED50>"
>a b x轨迹图(a)
[1] ""
>轨迹(b)
[1] ""
>对于(x中的myList){print(traceem(myList))}
[1] ""
[1] ""

site
变量保留,因为索引变量保留在周围环境中是标准行为

具有
lappy
的解决方案如下所示:

sites <- lapply(sites, function(x) { 
  x$time <-  dmy_hms(x$timestamp)
  x
})

sites
site
还不是一个对象。此外,
站点
是一个列表。因此,您必须
lappy
而不是循环。您需要
sites[[site]]$时间您必须提供
str(sites)
的输出。如果您运行前面的行,
names(sites)@Dirk,我添加了一个包含
lappy
解决方案的答案。由于您的示例没有提供可复制的示例,您可以检查它是否有效。否则,我可以改进它。@loki谢谢。它起作用了!这实际上是有道理的。那么正确的方法是什么呢?我认为
lappy
将是最明智的方法。除此之外,如@lmo所建议的,迭代
名称(站点)
并使用
[[]]
操作符访问列表。
sites <- lapply(sites, function(x) { 
  x$time <-  dmy_hms(x$timestamp)
  x
})