如何更新只有一个领域与certbot?(How to renew only one domain with certbot?)
我有多个证书的域名:
$ ll /etc/letsencrypt/live/ > domain1.com > domain2.com > domain3.com > ...
我只需要续订
domain1.com
,但命令certbot renew
更新所有域的证书。 我如何明确地续订某些证书?I have multiple domains with multiple certificates:
$ ll /etc/letsencrypt/live/ > domain1.com > domain2.com > domain3.com > ...
I need to renew only
domain1.com
, but the commandcertbot renew
renews certificates for all domains. How can I renew certain certificate explicitly?
原文:https://stackoverflow.com/questions/42591165
最满意答案
您对
apply
调用失败,因为它的第三个参数是函数调用的结果,而不是函数本身。 此外,虽然它可以根据您的基本数据工作,但如果您的data.frame中有任何其他数据类型,它将失败,因为apply
会将data.frame转换为matrix
,这将导致类型转换。 正因为这个(以及其他一些原因)我建议不要在这里使用apply
。我认为你可以很容易地对它进行矢量化,并且可以通过
merge
来解决引入基于grp
的添加的技巧。 (它也可以用dplyr::left_join
。)你的数据:
increment <- read.table(text = "grp increment 1 10 2 25 3 35 4 50", header = TRUE) input <- read.table(text = "grp pos 1 10 1 14 1 25 2 3 2 20 3 2 3 10", header = TRUE)
我会更新这个,以便调整基于
$increment
列。 你可以替换$increment
而不是添加$add
。increment$add <- c(0, cumsum(increment$increment[-nrow(increment)])) increment # grp increment add # 1 1 10 0 # 2 2 25 10 # 3 3 35 35 # 4 4 50 70 x <- merge(input, increment[,c("grp", "add")], by = "grp") x # grp pos add # 1 1 10 0 # 2 1 14 0 # 3 1 25 0 # 4 2 3 10 # 5 2 20 10 # 6 3 2 35 # 7 3 10 35
从这里开始,这只是一个调整问题。 这两个都是
x$pos_adj <- x$pos + x$add x$add <- NULL # remove the now-unnecessary column x # grp pos pos_adj # 1 1 10 10 # 2 1 14 14 # 3 1 25 25 # 4 2 3 13 # 5 2 20 30 # 6 3 2 37 # 7 3 10 45
(我对列等等有点冗长。这当然可以做得更紧凑,但我希望有空间去理解正在做什么以及在哪里。)
Your call to
apply
is failing because your third argument to it is the result from a function call, not a function itself. Further more, though it can work given your rudimentary data, if there are any other data types in your data.frame, it will fail sinceapply
converts the data.frame into amatrix
, which will result in type-conversions. It is because of this (and a few other reasons) that I recommend against usingapply
here.I think you can vectorize it fairly easily, and the trick to bring in the
grp
-based additions can be resolved withmerge
. (It can also be done withdplyr::left_join
.)Your data:
increment <- read.table(text = "grp increment 1 10 2 25 3 35 4 50", header = TRUE) input <- read.table(text = "grp pos 1 10 1 14 1 25 2 3 2 20 3 2 3 10", header = TRUE)
I'll update this so that the adjustments are based on the
$increment
column. You can replace$increment
instead of adding$add
, over to you.increment$add <- c(0, cumsum(increment$increment[-nrow(increment)])) increment # grp increment add # 1 1 10 0 # 2 2 25 10 # 3 3 35 35 # 4 4 50 70 x <- merge(input, increment[,c("grp", "add")], by = "grp") x # grp pos add # 1 1 10 0 # 2 1 14 0 # 3 1 25 0 # 4 2 3 10 # 5 2 20 10 # 6 3 2 35 # 7 3 10 35
From here, it's simply a matter of adjusting. Both of these are
x$pos_adj <- x$pos + x$add x$add <- NULL # remove the now-unnecessary column x # grp pos pos_adj # 1 1 10 10 # 2 1 14 14 # 3 1 25 25 # 4 2 3 13 # 5 2 20 30 # 6 3 2 37 # 7 3 10 45
(I've been a bit verbose with columns and such. This can certainly be made a little more compact, but I wanted there to be room for understanding what is being done and where.)
相关问答
更多-
您对apply调用失败,因为它的第三个参数是函数调用的结果,而不是函数本身。 此外,虽然它可以根据您的基本数据工作,但如果您的data.frame中有任何其他数据类型,它将失败,因为apply会将data.frame转换为matrix ,这将导致类型转换。 正因为这个(以及其他一些原因)我建议不要在这里使用apply 。 我认为你可以很容易地对它进行矢量化,并且可以通过merge来解决引入基于grp的添加的技巧。 (它也可以用dplyr::left_join 。) 你的数据: increment <- re ...
-
你声明该函数应该返回一个int ,但使用wrap来表示返回的对象应该是一个SEXP 。 而且,从Rcpp调用R函数(通过Function )也会返回一个SEXP 。 你想要的东西像: #include
using namespace Rcpp; // [[Rcpp::export]] SEXP mySuminC(){ Environment myEnv = Environment::global_env(); Function mySum = myEnv["mySum"]; ... -
如何将所有功能存储到容器中? 要存储在某个容器中,它们必须属于同一类型。 std::function包装器是一个不错的选择,因为它允许您使用甚至有状态的函数对象。 由于您可能不希望所有函数都使用相同数量的参数,因此您需要从静态主机类型系统中“提取”函数的arity。 一个简单的解决方案是使用接受std::vector函数: // Arguments type to the function "interface" using Arguments = std::vector
const &; // ... -
我把这个问题传递给了我的大学R研究小组,并且没有Stack Overflow帐户的人提供了一个解决方案。 它不使用apply()。 calcWayDistMODIFIED <- function(lon1, lat1, con1, lon2, lat2, con2) { if (con1 == con2) { dd = distVincentyEllipsoid(c(lon1,lat1), c(lon2,lat2)) } else if (con1 == "Africa" & con2 == ...
-
我认为你的问题很复杂(除了“拼写错误”)。 据我所知,你对第一个“序列”的最后一部分感兴趣,最后一部分是| ? 如果是这样,你可以这样做: a$uniprot_ID <- gsub("^sp\\|{1}[^|]+\\|{1}([^|,]+)($|,.*)","\\1",a$protein) a # protein uniprot_ID #1 sp|A6NCE7|MP3B2_HUMAN,sp|Q9GZQ8|MLP3B_HUMAN M ...
-
它的工作原理如下: # library library(forecast) # data dat <- c(1,1.1,1,1.2) # function definition func <- function(x){ (temp <- forecast(ar(x))) } # usage func(dat) 但是,我不知道为什么它对你的情况不起作用。 I used the workaround suggested in Why can't I pass a dataset to a fun ...
-
欢迎来到R和SO。 有很多方法可以创建一个适合您的目的的函数。 # Function stats.insert # Args: # formula : see ?lm # data: a data.frame, see ?lm # ... Arguments passed to the legend() for the plot # # Return: # A plot of the data with the regression line, and the coefficien ...
-
问题是当你在函数内调用ls()它默认返回该函数环境中的对象。 与rm()相同。 尝试这个: clear <- function() { rm(list=ls(.GlobalEnv), envir=.GlobalEnv) } The problem is that when you call ls() inside a function it returns the objects in the environment of that function by default. Same with rm( ...
-
对我来说,似乎你想加入Data和TwistTieFix,其中tag_color=color_match和julian_start <= julian_date <= julian_cut_off_date 。 以下是dput表单中的示例data.sets TwistTieFix <- structure(list(color_name = structure(c(2L, 1L), .Label = c("blue", "yellow"), class = "factor"), date = structu ...
-
这里发生的是数据帧中的行在通过apply提取后不再具有列名(但它们确实有names ): 尝试: getpos <- function(x, vorl="v"){ vot <- x[grep( "v", names(x) )] ; lab <- x[grep( "l", names(x) )]; if (vorl=="v") {vot[vot>0]} else {lab[vot>0]}; } > apply(dat, MARGIN=1, FUN=function(x2) getp ...