定义宏library(networkD3)
library(visNetwork)
library(dplyr)
data(MisLinks)
data(MisNodes)
visNetwork(
MisNodes %>%
rename("label"=name) %>%
mutate(id = seq_len(nrow(MisNodes))-1),
MisLinks %>%
rename("from"=source, "to"=target)
) %>%
visNodes(
shape = "image",
image = "http://cdn0.iconfinder.com/data/icons/octicons/1024/mark-github-128.png"
)
:
try
这将生成一个值为local try "a b c"
的宏。
现在我想要一个新值a b c
,它取值try2
。也就是说,我想为旧宏的每个元素添加相同的前缀,并将其定义为新的宏。
答案 0 :(得分:2)
据我所知,在官方的Stata中没有特别支持的功能。有关附近的功能,请参阅help macrolists
。
旧包listutil
(SSC)包含各种命令,prelist
是相关的。我写了这个,所以它不会对其他人不利。让我建议只应用一般技术的工作。
local try "a b c"
local copy `try'
gettoken first copy : copy
while ("`first'" != "") {
local try2 `try2' d`first'
gettoken first copy : copy
}
di "try is {col 12} `try'"
di "try2 is{col 12} `try2'"
答案 1 :(得分:1)
你也可以使用Mata来做到这一点。
local try "a b c"
mata: st_local("try2", invtokens("d" :+ tokens(st_local("try"))))
assert "`try2'" == "da db dc"
用语言来说,这就是第二行所做的,首先解释最内层的功能:
st_local("try")
:访问局部变量中的内容。这应该评估为" a b c"。tokens("a b c")
:将字符串拆分为标记,例如tokens("a b c")
- > ("a", "b", "c")
。"d" :+ ("a", "b", "c")
:在Mata中,您可以使用+
连接字符串,此处:+
执行此元素,因此结果将是(" da&#34 ;," db",dc")。invtokens(("da", "db", dc"))
:将令牌放回字符串,即invtokens(("da", "db", dc"))
- > "da db dc"
。st_local("try2", "da db dc")
:Mata相当于local try2 "da db dc"
。您可以通过以下方式找到有关Mata功能st_local()
,tokens()
和invtokens()
的更多信息。 help mf_st_local
。