通过 apply 函数传递的列名 R

6

我正在尝试在数据框上使用apply和用户定义的函数。在函数内部,我想使用列名(作为图表的标题),但是apply似乎会剥离列名并仅传递向量。最小工作示例:

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中访问colnames,但我的问题是,你想用这段代码实现什么?根据你的帖子,没有必要调用apply - emilliman5
1
我在我的实际函数中做了很多事情,有些事情需要列名。例如,我生成一些图形,我想在标题中使用名称。我猜如果我不能访问属性,我需要重写函数使其接受一个字符串,并调用apply以便它可以接受两个参数。 - Lespied
首先,我考虑使用lapply来迭代处理你的列。其次,不要将整个数据框传递给lapply,而是传递列名,然后从数据框中进行子集操作。 - emilliman5
lapply(colnames(trialData), function(x) myfun(trialData[, x] ) 会返回一个包含图形的列表对象。然后,您可以循环遍历该列表并调用print来绘制图形。 - Sathish
1个回答

4

感谢评论者,我得到了以下结果,这让我获得了我想要的结果。

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接