相关疑难解决方法(0)

将列名作为参数传递给R语言中的函数

我有一个功能:

aggreg <- function(fileName, param){   
  contents <- read.csv(fileName, header=T)
  #print(contents)  #This displays all contents
  print(contents$param) #gives NULL
}

> aggreg("test.csv","Close.Price")
> NULL
Run Code Online (Sandbox Code Playgroud)

请进一步指导.谢谢:)

r

12
推荐指数
1
解决办法
1万
查看次数

在R:传递列名作为参数并在函数中使用它与dplyr :: mutate()和lazyeval :: interp()

这个问题链接到这个SO答案,除了在这里我想使用在a中指定为函数arg的变量mutate_().如果我不做任何"计算",它的工作原理是mutate_():

data <- 
  data.frame(v1=c(1,2),
             v2=c(3,4))



func1 <- function(df, varname){
    res <-
      df %>%
      mutate_(v3=varname)
    return(res)
  }
func1(data, "v1")
Run Code Online (Sandbox Code Playgroud)

这给了预期:

  v1 v2 v3
1  1  3  1
2  2  4  2
Run Code Online (Sandbox Code Playgroud)

但如果我做这样的事情,似乎我没有正确指定"v3":

func2 <- function(df, varname){
  res <-
    df %>%
    mutate_(v3=sum(varname))
  return(res)
}
func2(data, "v1") 
Run Code Online (Sandbox Code Playgroud)

不起作用; 为什么它不等同于函数之外?:

data %>%
  mutate(v3=sum(v1))
Run Code Online (Sandbox Code Playgroud)

得到:

  v1 v2 v3
1  1  3  3
2  2  4  3
Run Code Online (Sandbox Code Playgroud)

更新(在@docendo discimus的解决方案之后):关于使用lazyeval::interp()工作的解决方案.但是,如果有一个更复杂的功能,我似乎得到了很多打字.例如.我想要一个函数,可以在计数数据框中为所有NP组合返回得分和fisher的2x2 pvalue,c.

require(plyr)
require(dplyr)
require(lazyeval)
set.seed(8)
df <- 
  data.frame(
    N …
Run Code Online (Sandbox Code Playgroud)

arguments r function variable-names dplyr

3
推荐指数
2
解决办法
4773
查看次数

标签 统计

r ×2

arguments ×1

dplyr ×1

function ×1

variable-names ×1