问题描述
library(tidyverse)
fac_levels <- c("NDVI","SR","WBI","NWI-1","NWI-2","NWI-3","NWI-4","1650/2220 nm ratio")
df %>%
pivot_longer(-Models,values_drop_na = TRUE) %>%
mutate(Models = factor(Models,levels = fac_levels),name = factor(name,levels = rev(fac_levels)),p.value = cut(value,c(max(value,na.rm = T),0.05,0.01,min(value,na.rm = T)),labels = c("NS","< 0.05","< 0.01"))) %>%
ggplot(aes(x=Models,y=name,fill=p.value)) +
theme_bw() +
geom_tile() +
xlab("Parameters") + ylab(" ") +
theme(text=element_text(size=18,family="serif"))+
scale_colour_manual(values = c("#DAA520","#F5DEB3","#FFF8DC","#DCDCDC"),aesthetics = c("colour","fill")) +
geom_text(aes(label=format(round(value,2),nsmall = 2)),color="black",size=2) +
scale_x_discrete(drop=FALSE) +
scale_y_discrete(drop=FALSE)
我正在使用jq来设置A,B和c的值
类似这样的东西
{"A":"ab3241c","B":"d12e31234f","c":"[g$x>Q)M&.N+v8"}
A和B都可以正常工作。当我做类似的事情
expression='. | to_entries | .[] | .key + "=\"" + .value + "\""'
eval "$(python script.py | jq -r "$expression")"
但是问题出在c上,我得到的输出为
echo $A
ab3241c
所以$ x>和&转换为unicode。 我可以修正表达式以避免这种情况吗?
我使用修复了它 表示为
[g\u003eQ)M\u0026.N+v8
解决方法
在这里使用eval
就像在脚上射击自己。
为什么不仅仅将python命令的输出通过管道传递给jq命令?
考虑:
function mypython {
cat <<"EOF"
{"A":"ab3241c","B":"d12e31234f","c":"[g$x>Q)M&.N+v8"}
EOF
}
expression='to_entries[] | .key + "=\"" + .value + "\""'
mypython | jq -r "$expression"
请注意,在此处使用expression
似乎也毫无意义。通常,最好是“内联”它,或将其放在文件中并使用jq的-f命令行选项。
(请注意,expression
中不需要第一个“。”。)
如果您确实必须使用eval
,请考虑:
function mypython {
cat <<"EOF"
{"A":"ab3241c","c":"[g$x>Q)M&.N+v8"}
EOF
}
expression='to_entries[] | .key + \"=\\\"\" + .value + \"\\\"\"'
eval "mypython | jq -r \"$expression\""
输出
A="ab3241c"
B="d12e31234f"
c="[g$x>Q)M&.N+v8"