我想分两步解决我的问题,以便让我更好地理解编码方式 .
Part 1:
假设我有一个这样的列表:
x <- data.frame(replicate(5,sample(0:100,10,rep=TRUE)))
y <- data.frame(replicate(5,sample(0:100,10,rep=TRUE)))
z <- list(x, y)
我想获得每个列表中每列的数字范围 . 我真的不明白如何将lapply与sapply结合起来获取列表中每列数据帧的结果 . 有关如何做到这一点的任何想法?
所有我能够正常运行的是,如果我想得到第一个列表元素的第三列的范围:
range(z[[1]][[2]])
Part 2:
我的问题的第二部分更进一步 . 这次我将添加一个包含字符的列到我的数据帧 .
a <- data.frame(replicate(5,sample(0:100,10,rep=TRUE)))
a$x6 <- letters[1:10]
b <- data.frame(replicate(5,sample(0:100,10,rep=TRUE)))
b$x6 <- letters[1:10]
c <- list(x, y)
我想获得每个列表的每列的数字范围,除了第6列不是数字 . 我不想删除此列,而只想查询数字列 .
关于如何有效地做到这一点的任何想法?我认为lapply和sapply的组合将是最好的 .
如果您对如何使用嵌套循环有所了解,那么知道这一点也很有趣 . 也许第二部分也只适用于嵌套循环...
2 回答
第一个可以完成
第二个可以完成
此处的内部
sapply
创建c
的每个元素的列索引的逻辑向量,它们是数字的,因此它将使字符列不在循环中 .顺便说一句,在R中使用
c
作为变量名是一个坏主意,因为它也是一个常见的函数!第一个是使用嵌套函数直截了当 .
对于第二个,嵌套函数开始变得有点难看: