问题描述
我在清理代码时遇到问题。我知道我可以把这些都打出来,但我们显然不想那样做。
我的全球环境中只有数据框。它们都是“data.frame”。
我想检查所有这些的尺寸并将其放在小标题中。我以某种方式做到了。我还想更改他们的 colnames() tolower() 如果我只输入 data.frame 的名称,这很容易,但是有 2 个以上,我希望它自动完成。然后我也想以同样的方式改变所有的 data.frames。
我的代码的小例子:
library(tidyverse)
x <- data.frame(letters[1:2]) #To create the data
y <- data.frame(letters[3:4])
dfs <- as.list(ls()) #I take whatever is in my environment
我设法在下面获得了一些尺寸:
z <- as_tibble(lapply(seq_along(dfs),function(j) dim(get(dfs[[j]]))),.name_repair = "unique")
colnames(z) <- dfs
现在对于存储在我的列表中的所有 data.frames 的列名,我基本上想要执行以下代码:
colnames(dfs[[1]]) <- tolower(colnames(dfs[[1]])
但是正如我之前发现的那样返回NULL。所以我在那里使用了 get() 使其适用于维度。但是如果我使用 get() 来分配列名,它说它找不到函数“get 由于所有数据帧的所有列名都相同(只是 nrows() 不同),我可以将小写列名保存为值并使用它,但这并不能消除它无法找到 get
names <- tolower(colnames(x))
sapply(seq_along(dfs),function(j) colnames(get(dfs[[j]])) <- names)
*Error in colnames(get(dfs[[j]])) <- names :
could not find function "get<-"*
至于变异部分,我尝试了 for 循环:
for(i in seq_along(dfs)){
get(dfs[[i]]) <- get(dfs[[i]]) %>% mutate(cd = ab)
}
但这是同样的问题。 有人可以帮我解决这个问题吗? (如果有更清晰的尺寸代码,将不胜感激)
我只是想提高我的编码技能。如果我把它全部打出来,我早就完成了,但这违背了目的。
谢谢!
-JK
解决方法
使用 base R
lapply(dfs,function(x) transform(setNames(x,tolower(names(x))),X = c('a','b')))