我有一个列表,可能是空的或非空的.
我想创建一个新文件,其中包含该列表的格式是人类可读的,并且我的下一个脚本很容易解析.在列表非空的情况下,这工作正常,我的下一个脚本读入json文件.但是当列表为空时,我得到"ValueError:没有JSON对象可以被解码".这是有道理的,因为当我打开文件时,确实没有内容,因此没有JSON对象.
有些列表是空的,我很好.所以,要么我想写一个空的JSON对象,要么我希望我的阅读器脚本没有找到JSON对象.
这是相关的代码:
作家脚本
favColor = [] OR favColor = ['blue'] OR favColor = ['blue', 'green']
fileName = 'favoriteColor.json'
outFile = open(fileName, 'w')
json.dump(outFile, favColor)
outFile.close()
Run Code Online (Sandbox Code Playgroud)
读者脚本
fileName = 'favoriteColor.json'
inFile = open(fileName, 'r')
colors = json.load(inFile)
inFile.close()
Run Code Online (Sandbox Code Playgroud)
任何帮助或建议非常感谢.如果我需要提供更多理由来说明我为什么这样做,我也可以提供这个,只是想我开始时只需要最少的理解问题.
我有类似的东西
y ~ x + z
Run Code Online (Sandbox Code Playgroud)
我想将其转化为
y ~ x_part1 + x_part2 + z
Run Code Online (Sandbox Code Playgroud)
更一般地说,我希望有一个函数,它接受一个公式并返回该公式,所有匹配"^ x $"的项被"x_part1"和"x_part2"替换.这是我目前的解决方案,但它只是感觉如此kludgey ...
my.formula <- fruit ~ apple + banana
var.to.replace <- 'apple'
my.terms <- labels(terms(my.formula))
new.terms <- paste0('(',
paste0(var.to.replace,
c('_part1', '_part2'),
collapse = '+'),
')')
new.formula <- reformulate(termlabels = gsub(pattern = var.to.replace,
replacement = new.terms,
x = my.terms),
response = my.formula[[2]])
Run Code Online (Sandbox Code Playgroud)
另一个警告是输入公式可以通过交互指定.
y ~ b*x + z
Run Code Online (Sandbox Code Playgroud)
应输出这些(等效)公式之一
y ~ b*(x_part1 + x_part2) + z
y ~ b + (x_part1 + x_part2) + b:(x_part1 …Run Code Online (Sandbox Code Playgroud) 我正在编写knitr-sweave文档,并发现全局R选项之类的
par(lwd=3)
Run Code Online (Sandbox Code Playgroud)
和
strOptions(strict.width='cut')
Run Code Online (Sandbox Code Playgroud)
不要在以后的代码块中生效.我可以在每次绘制plot()或str()时将这些选项指定为参数,因此这不是一个大问题.我只是想知道是否有人对此有任何见解.我应该缓存我设置这些选项的代码块吗?我在早期代码块中调用了一些库,并在其他代码中设置变量,它们似乎都可以"全局"访问(即在以后的代码块中).
我看到有一个内置函数...相当抽象...使用从十进制表示形式转换为罗马数字(将罗马数字转换为 R 中的数字),但我找不到从十进制转换为其他类似系统的内置方法,例如基数 3 或基数 11。我发现二进制和十六进制(基数 16)得到了很好的支持,但是是否有一个包可以用于与任意位置数字之间的转换系统。
我可以制作这样一个包,但我怀疑它已经存在,而我的 google-fu 只是不够?
我ggplot2经常使用,我不得不说这个让我感到困惑.
脚本是:
library(tidyverse)
data_frame(value = rbinom(n = 100, size = 100, prob = 0.3)) %>%
ggplot(mapping = aes(x = value)) %>%
geom_histogram()
sessionInfo()
Run Code Online (Sandbox Code Playgroud)
输出是:
> library(tidyverse)
Loading tidyverse: ggplot2
Loading tidyverse: tibble
Loading tidyverse: tidyr
Loading tidyverse: readr
Loading tidyverse: purrr
Loading tidyverse: dplyr
Conflicts with tidy packages -------------------------------------------------------
filter(): dplyr, stats
lag(): dplyr, stats
>
> data_frame(value = rbinom(n = 100, size = 100, prob = 0.3)) %>%
+ ggplot(mapping = aes(x = value)) %>%
+ geom_histogram() …Run Code Online (Sandbox Code Playgroud) 我想比较一个图中我的数据的一些子组和另一个图中的一些其他子组。如果我将所有子组都绘制成一个图,这个数字是压倒性的,每个单独的比较都变得困难。我认为如果给定的子组在所有图中使用相同的颜色,对读者来说会更有意义。
这是我尝试过的两件事,几乎可以工作,但都不太奏效。他们离我最接近 MWE 了!
错误,因为所有三个级别都显示在图例中
library(tidyverse)
# compare first and second species
ggplot(data = iris %>% filter(Species != 'virginica'),
mapping = aes(x = Sepal.Length,
y = Sepal.Width,
color = Species)) +
geom_point() +
scale_color_discrete(drop = FALSE)
# compare second and third species
ggplot(data = iris %>% filter(Species != 'setosa'),
mapping = aes(x = Sepal.Length,
y = Sepal.Width,
color = Species)) +
geom_point() +
scale_color_discrete(drop = FALSE)
Run Code Online (Sandbox Code Playgroud)

请注意,未绘制的级别仍然出现在图例中(与 drop = FALSE 的想法一致)。
错误,因为第二个图没有保持第一个图建立的物种颜色映射
# compare first and second species
ggplot(data = …Run Code Online (Sandbox Code Playgroud)