我有一个功能:
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)
请进一步指导.谢谢:)
这个问题链接到这个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)