【问题标题】:data frame in user defined function in RR中用户定义函数中的数据框
【发布时间】:2013-02-08 15:34:54
【问题描述】:

我正在尝试制作一个带有两个参数的函数。一个参数是数据框的名称,第二个参数是该数据框中列的名称。目标是让函数根据指定列中包含的信息来操作整个帧中的数据。

我的问题是我不知道如何使用输入到第二个参数中的字符表达式来访问函数内数据框中的特定列。这是一个超级简短的例子,

datFunc <- function(dataFrame = NULL, charExpres = NULL) {

return(dataFrame$charExpress)

}

例如,如果您输入

datFunc(myData, "variable1")

这不会返回 myData$variable1。必须有一个简单的方法来做到这一点。对不起,如果这个问题很愚蠢,但我会在这里得到一点帮助。

一个相关的问题是,我如何使用字符串“myData$variable1”从myData实际返回variable1?

【问题讨论】:

  • return(dataFrame[[charExpress]])?

标签: r function character


【解决方案1】:

我认为 OP 也想将数据帧的名称作为字符串传递。如果是这种情况,您的功能应该是这样的。 (从其他答案借来的样本)

fooFunc <- function( dfNameStr, colNamestr, drop=TRUE) {
  df <- get(dfNameStr)
  return(df[,colNamestr, drop=drop])
}


> myData <- data.frame(ID=1:10, variable1=rnorm(10, 10, 1))
> myData
   ID variable1
1   1 10.838590
2   2  9.596791
3   3 10.158037
4   4  9.816136
5   5 10.388900
6   6 10.873294
7   7  9.178112
8   8 10.828505
9   9  9.113271
10 10 10.345151


> fooFunc('myData', 'ID', drop=F)
   ID
1   1
2   2
3   3
4   4
5   5
6   6
7   7
8   8
9   9
10 10
> fooFunc('myData', 'ID', drop=T)
 [1]  1  2  3  4  5  6  7  8  9 10

【讨论】:

  • +1 为get,不知道!使用grepcolnames获取索引时间最长!
【解决方案2】:

您快到了,尝试使用[ 而不是$ 进行此类索引

  datFunc <- function(dataFrame = NULL, charExpres = NULL, drop=TRUE) {
  return(dataFrame[, charExpres, drop=drop])
  }


# An example
set.seed(1)
myData <- data.frame(ID=1:10, variable1=rnorm(10, 10, 1))  # DataFrame

datFunc(myData, "variable1") # dropping dimensions
[1]  9.373546 10.183643  9.164371 11.595281 10.329508  9.179532 10.487429 10.738325 10.575781  9.694612

datFunc(myData, "variable1", drop=FALSE) # keeping dimensions
   variable1
1   9.373546
2  10.183643
3   9.164371
4  11.595281
5  10.329508
6   9.179532
7  10.487429
8  10.738325
9  10.575781
10  9.694612

【讨论】:

  • 我能再问一个简单的问题吗?假设我想允许用户通过将字符串作为参数传递给函数来命名要由函数生成的数据框的列。你怎么能这样做?
  • 我不能投票,因为我没有足够高的声誉...... :(
【解决方案3】:

或者,您可以找到数据框的列索引:

df <- as.data.frame(matrix(rnorm(100), ncol = 10))
colnames(df) <- sample(LETTERS, 10)

column.index.of.A <- grep("^A$", colnames(df))
df[, column.index.of.A]

【讨论】:

    猜你喜欢
    • 2021-03-23
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    相关资源
    最近更新 更多