我正在为R中的par()
选项编写一些通用的访问器函数。
获取参数
getPar = function(key)
{
par()[[key]];
}
这按预期工作。
getPar("mar");
设置参数
# save memory ... restoreState ... pdf
setPar = function(key, val)
{
# par(mar=c(0.25, 0.25, 0.25, 0.25)
# R.O. indicates read-only arguments: These may only be used in queries and cannot be set. ("cin", "cra", "csi", "cxy", "din" and "page" are always read-only.)
# https://www.rdocumentation.org/packages/graphics/versions/3.6.2/topics/par
pnames = names( par(no.readonly = TRUE) );
if(is.element(key, pnames))
{
par()[[key]] = val;
}
}
这个不起作用:
mar = c(0.25, 0.25, 0.25, 0.25);
setPar("mar", mar);
并引发错误:
Error in par()[[key]] = val : invalid (NULL) left side of assignment
关于如何编写上面列出的setter
函数,您有什么想法吗?
是的,我明白了,我可以直接传递par(mar = c(0.25, 0.25, 0.25, 0.25))
来“设置”值。我正在寻找一个可以在这个简单的setter
函数中工作的解决方案。一个可变参数的方法。
1条答案
按热度按时间wooyq4lh1#
对列表的赋值(即
[<-
和[[<-
)需要赋值的LHS上的 object,而不是产生列表的表达式。我建议您将
setPar
更改为实际使用par
设置值,而不是尝试对列表进行操作。