【问题标题】:Passing variable name into sapply将变量名传递给 sapply
【发布时间】:2014-01-19 10:43:25
【问题描述】:

这是一个玩具数据集:

df1 <-data.frame(c("267119002","257051033",NA,"267098003","267099020","267047006"))
names(df1)[1]<-"ID"

df2 <-data.frame(c("257051033","267098003","267119002","267047006","267099020"))
names(df2)[1]<-"ID"
df2$vals <-c(11,22,33,44,55)

和玩具代码:

fetcher <-function(x){
  y <- df2$vals[which(match(df2$ID,x)==TRUE)]
  return(y) 
}

sapply(df1$ID,function(x) fetcher(x))

sapply 语句中,我需要使用变量名,而不是使用df1$ID。如:

col <-"ID"
sapply(df1[col],function(x) fetcher(x))

但是,当我这样做时,它不会遍历 df1$ID 的所有值。这样它只对第一个值执行sapply。示例输出:

> sapply(df1[col],function(x) fetcher(x))
ID 
33 
> sapply(df1$ID,function(x) fetcher(x))
[1] 33 11 22 55 44

那么为什么会这样呢?我需要使用变量名而不是确切的列名,因为我需要将其应用于每次程序运行时都会发生变化的不同列。但我需要它应用于每一行,而不仅仅是第一行。

【问题讨论】:

    标签: r variables matrix sapply


    【解决方案1】:

    区别在于df1[col] 返回一个单列数据框,df1$ID 返回一个向量/因子。使用您的代码,您需要一个向量/因子,因此您可以

    使用df1[, col]

    sapply(df1[, col],function(x) fetcher(x))
    

    或双括号df1[[col]]

    sapply(df1[[col]],function(x) fetcher(x))
    

    .

    【讨论】:

    • 非常感谢工作完美!我学到了一些东西来启动!非常感谢马克!
    猜你喜欢
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 2015-11-21
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多