【问题标题】:Colnames passed through an apply function R通过应用函数 R 传递的列名
【发布时间】:2017-02-15 13:04:14
【问题描述】:

我正在尝试在 data.frame 上使用 apply 和用户定义的函数。在函数内部,我想使用列名(作为绘图的标题),但 apply 似乎去掉了列名并只传递了一个向量。 MWE:

trialData <- data.frame('a' = rnorm(100),
                        'b' = rnorm(100),
                        'c' = rnorm(100))

someData <- function(dataInput){
  return(colnames(dataInput))
}

dataOutput <- apply(trialData, 2, someData)

print(dataOutput)

返回NULL。有什么方法可以访问函数内部的列名吗?

【问题讨论】:

  • *apply 函数不允许您访问正在循环的数据的“属性”。有一些迂回的方法可以从 *apply 中访问 c​​olnames,但我的问题是你想用这段代码实现什么?根据您的帖子,无需致电apply
  • 我在我的实际函数中做了很多事情,有些事情需要列的名称。例如,我生成了一些数字,我想在标题中使用名称。我想如果我不能访问属性,我需要重写函数以便它接受一个字符串,并调用 apply 以便它接受两个参数。
  • 首先,我考虑使用 lapply 来遍历您的列。其次,不要将数据框传递给 lapply,而是传递列名,然后从数据框中传递子集以进行您的预期操作。
  • lapply(colnames(trialData), function(x) myfun(trialData[, x] ) 将返回一个带有绘图的列表对象。然后您可以遍历列表并调用 print 来绘制图形跨度>

标签: r apply


【解决方案1】:

感谢下面的评论,让我得到了我想要的结果。

trialData <- data.frame('a' = rnorm(100),
                        'b' = rnorm(100),
                        'c' = rnorm(100))

someData <- function(dataInput){
  # lots of code here
  return(
    dataName = colnames(dataInput)
  )
}

dataOutput <- lapply(colnames(trialData), function(x){someData(trialData[x])})

print(dataOutput)

【讨论】:

    猜你喜欢
    • 2016-01-16
    • 2019-02-14
    • 2018-05-08
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多