循环遍历变量名称的向量并应用函数(在 R 中)
Looping through vector of variable names and applying a function (in R)
所以我已经找到了一些相关主题,但不知何故无法将它们应用到我的案例中。其实我觉得这个很简单:
我正在尝试编写一个循环,该循环将向我显示给定数据帧的每个变量的所有唯一值(让我们称之为 "data")。因此,我正在尝试应用 unqiue() fct。以下是我的想法:
i=0
for (name in names(data)) {i=i+1; print(get(paste0((unique(names(data)[i])))))}
我想我还没弄清楚get/assign/paste的正确用法。
有什么帮助吗?提前致谢
如果你想写一个for循环来实现这个,你可以这样做:
for(name in names(data)) {
print(unique(data[, name]))
}
您也可以使用lapply
功能。 lapply(data, unique)
.
更新:apply
和lapply
之间的性能比较:
df <- data.frame(x = 1:1000, y = 1:1000, z = 1:1000)
microbenchmark(lapply(df, unique), apply(df, 2, unique), times = 10000)
Unit: microseconds
expr min lq mean median uq max neval
lapply(df, unique) 41.874 47.211 69.87959 51.317 55.832 10405.64 10000
apply(df, 2, unique) 163.390 178.580 241.17553 187.201 209.370 11389.26 10000
所以我已经找到了一些相关主题,但不知何故无法将它们应用到我的案例中。其实我觉得这个很简单: 我正在尝试编写一个循环,该循环将向我显示给定数据帧的每个变量的所有唯一值(让我们称之为 "data")。因此,我正在尝试应用 unqiue() fct。以下是我的想法:
i=0
for (name in names(data)) {i=i+1; print(get(paste0((unique(names(data)[i])))))}
我想我还没弄清楚get/assign/paste的正确用法。
有什么帮助吗?提前致谢
如果你想写一个for循环来实现这个,你可以这样做:
for(name in names(data)) {
print(unique(data[, name]))
}
您也可以使用lapply
功能。 lapply(data, unique)
.
更新:apply
和lapply
之间的性能比较:
df <- data.frame(x = 1:1000, y = 1:1000, z = 1:1000)
microbenchmark(lapply(df, unique), apply(df, 2, unique), times = 10000)
Unit: microseconds
expr min lq mean median uq max neval
lapply(df, unique) 41.874 47.211 69.87959 51.317 55.832 10405.64 10000
apply(df, 2, unique) 163.390 178.580 241.17553 187.201 209.370 11389.26 10000