我试图通过对数据框的每一行应用一个函数来获得一个列表,其中每个元素都有一个名称,但无法获得正确的输出。
假设这是我要应用于每一行的函数:
format_setup_name <- function(m, v, s) {
a <- list()
a[[paste(m, "machines and", v, s, "GB volumes")]] <- paste(num_machines,num_volumes,vol_size,sep="-")
a
}
如果这是输入数据框:
df <- data.frame(m=c(1,2,3), v=c(3,3,3), s=c(15,20,30))
我无法获得如下所示的列表:
$`1-3-15`
[1] "1 machines and 3 15 GB volumes"
$`2-3-20`
[1] "2 machines and 3 20 GB volumes"
$`3-3-30`
[1] "3 machines and 3 30 GB volumes"
谁能告诉我怎么做?
为什么我需要这个?好吧,我想使用来自数据库的值以 Shiny 的方式填充 selectizeInput
。由于我要合并多个列,因此我需要一种方法来将所选输入与值相匹配。
最佳答案
这是 setNames
的一个很好的用例,它可以将 names()
属性添加到对象。此外,如果您使用 as.list
,您可以在一行中完成此操作而无需任何循环:
setNames(as.list(paste(df$m, ifelse(df$m == 1, "machine", "machines"), "and", df$v, df$s, "GB volumes")), paste(df$m,df$v,df$s,sep="-"))
# $`1-3-15`
# [1] "1 machine and 3 15 GB volumes"
#
# $`2-3-20`
# [1] "2 machines and 3 20 GB volumes"
#
# $`3-3-30`
# [1] "3 machines and 3 30 GB volumes"
关于r - 通过将函数应用于数据框的每一行来创建具有命名值的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29501176/