当我使用这个原子序数载体,它的工作原理:函数调用中的评估函数调用
x = data.frame(myvar = 1:10)
test_atom = function(var, maxvalue = max(var)) {
return(maxvalue)
}
test_atom(x$myvar)
# [1] 10
但是当我尝试以评估数据帧一列,有一个问题:
test_df = function(data, var, maxvalue = max(var)) {
params = as.list(match.call()[-1])
data$var = eval(params$var, data)
return(maxvalue)
}
test_df(x, myvar)
# Error in test_df(x, myvar) : object 'myvar' not found
不过请注意,下面的工作正常,如此评价似乎很动听:
test_df2 = function(data, var, maxvalue = max(var)) {
params = as.list(match.call()[-1])
data$var = eval(params$var, data)
return(data$var)
}
test_df2(x, myvar)
# [1] 1 2 3 4 5 6 7 8 9 10
如何正确评估论证以便它检测x $ myvar的最大值?
编辑要正确拼出我的本意,我想可能为maxvalue
手动设置的值,但如果我留空白,应该把自身设置的myvar
最大值。这可以通过函数中的条件语句来实现,以检查参数是否为NULL
,然后在函数内将maxvalue
设置为myvar
的最大值 - 但我希望以更简单的方式执行操作,即不在函数内。
实例 - 无论是应该可以:
test_df(x, myvar, 5) # I set the value of the last argument manually
test_df(x, myvar) # I leave it blank - and it sets itself to the max value of `myvar`
尝试'test_df(X,X $ MYVAR)'。这个返回'10'。 – symbolrush
@symbolrush当然。但是我希望这个函数接受数据帧作为第一个参数,然后接受单个变量而不使用'$'函数。这种格式在许多R函数中是习惯的,比如'subset(x,myvar> 5)' – jakub