In R有一种有效的方法来读取转置.csv文件吗?
例如,考虑以下文本文件:
Name,Peter,Paul,Marry
Age,40,9,38
Run Code Online (Sandbox Code Playgroud)
这可以通过以下方式读入data.table有用的列类:
library(data.table)
file <- tempfile("tmp.txt")
writeLines("Name,Peter,Paul,Mary\nAge,40,5,38\n", file)
lines <- readLines(file)
lines <- lapply(lines, function(x) gsub(pattern=",", replacement="\n", x, fixed=TRUE))
lines <- lapply(lines[-3], fread)
do.call(cbind,lines)
#> Name Age
#> 1: Peter 40
#> 2: Paul 5
#> 3: Mary 38
Run Code Online (Sandbox Code Playgroud)
有没有更简单的方法来实现这一目标?是否有更高效的版本(我的文件是1 GB)?
请注意,对于列式存储应该更容易阅读这样的列主存储,如a data.table.
Matplotlib 允许对绘图的各个元素进行光栅化并将其保存为混合像素/矢量图形 ( .pdf)(参见例如此答案)。如何在Rwith 中实现相同的效果ggplot2?
以下是一个玩具问题,我只想对geom_point图层进行光栅化。
set.seed(1)
x <- rlnorm(10000,4)
y <- 1+rpois(length(x),lambda=x/10+1/x)
z <- sample(letters[1:2],length(x), replace=TRUE)
p <- ggplot(data.frame(x,y,z),aes(x=x,y=y)) +
facet_wrap("z") +
geom_point(size=0.1,alpha=0.1) +
scale_x_log10()+scale_y_log10() +
geom_smooth(method="gam",formula = y ~ s(x, bs = "cs"))
print(p)
ggsave("out.pdf", p)
Run Code Online (Sandbox Code Playgroud)
按.pdf原样保存时,Adobe reader DC 需要大约 1 秒来渲染图形。您可以在下面看到一个.png版本:

当然,通常可以通过不绘制原始数据来避免该问题
我有一个图(用 R 制作ggplot2),它是一堆文本数据的奇异值分解的结果,所以我基本上有一个数据集,其中包含一些评论中使用的约 100 个单词和约 10 个评论类别,具有 2D 坐标对于他们每个人来说。由于文本量太大以及许多重要点的距离有多近,我很难让情节看起来清晰。
我的数据现在的结构方式是,我geom_texts用不同的格式绘制两个不同的数据,并为每个数据传递一个单独的坐标数据框。这更容易,因为如果 ~10 个类别与 ~100 个术语重叠(这是次要的)就可以了,而且我想要这两个类别有相当不同的格式,但不一定有理由不能将它们放在一起数据框,geom我想是否有人能找到解决方案。
我想做的是使用该ggrepel功能,使 ~10 个类别相互排斥,并使用该shadowtext功能使它们从彩色单词的背景中脱颖而出,但由于它们不同,geom我不确定如何为了实现这一目标。
带有一些虚假数据的最小示例:
library(ggplot2)
library(ggrepel)
library(shadowtext)
dictionary <- c("spicy", "Thanksgiving", "carborator", "mixed", "cocktail", "stubborn",
"apple", "rancid", "table", "antiseptic", "sewing", "coffee", "tragic",
"nonsense", "stufing", "words", "bottle", "distillery", "green")
set.seed(1)
data.frame(
Dim1 = rnorm(100),
Dim2 = rnorm(100),
Term = sample(dictionary, 100, replace = TRUE),
Color = as.factor(sample.int(10, 100, replace = TRUE))
) -> words
data.frame( …Run Code Online (Sandbox Code Playgroud) 我使用 Markdown 文档进行分析。我创建了大量的绘图并使用
knitr::opts_chunk$set(dev= c("png", "svg", "pdf")并rmarkdown::render(... , clean = FALSE)获取 png(用于谷歌幻灯片)、svg(用于 powerpoint)和 pdf(包含在手动乳胶报告中)。但是,我现在想将不同分析的绘图合并到图形面板中,同时能够更改绘图大小和纵横比,而无需每次重新运行所有分析。
实现此目的的一种方法是将 ggplots 保存在分析笔记本中.rds使用的文件中以及生成图形面板的单独脚本中。这可以使用钩子部分自动化:saveRDS(ggplot2::last_plot(), "figure_1.rds")library(patchwork); readRDS("figure_1.rds") / readRDS("figure_2.rds")
example_analysis.Rmd
```{r setup}
knitr::opts_chunk$set(dev= c("png", "svg", "pdf")
knitr::knit_hooks$set(hook_save_plot_as_rds = function(before, options, envir, name) {
if(before) return() # run only after chunk
if(length(knitr:::get_plot_files())==0) return() # only run if
saveRDS(ggplot2::last_plot(), knitr::fig_chunk(knitr::opts_chunk$get("label"), ext = "rds"))
})
```
Here we do some heavy analysis
```{r sepal-plot}
ggplot(iris, aes(Sepal.Width, Sepal.Length)) + geom_point()
```
Here we do some …Run Code Online (Sandbox Code Playgroud) 运行我的脚本时出现一个奇怪的错误:
Unable to find function @(x) exp(x) within H:\blabla\myClass.m.
Run Code Online (Sandbox Code Playgroud)
当我调试时,我得到:
34 b=myAnonymousFunction(a)
K>> myAnonymousFunction(3)
Unable to find function @() exp(x) within HH:\blabla\myClass.m.
K>> class(myAnonymousFunction)
ans =
function_handle
Run Code Online (Sandbox Code Playgroud)
我试图生产的最小例子很好.
你有任何想法错误来自何处及其含义?因为他显然可以找到精神错乱的定义......啊...... myAnonymousFunction.这只是一个错误吗?我在matlabcentral上阅读了一些内容,但它的7岁却没有给出解释.
进一步说明:
我在Windows 8 64位下运行MATLAB 2012 b.源文件最初是在64位Linux下编写的.
我不认为这是相关的,但myAnonymousFunction是myClass中函数的参数并存储在单元格数组中.所以它是这样的:文件myClass.m:
classdef myclass < handle
properties
x=1337;
myAnonymousFunctions;
end
methods
function new = myClass(myAnonymousFunctions)
new.myAnonymousFunction=myAnonymousFunction
end
function show(o)
disp(myAnonymousFunction{1}(o.x));
end
end
end
Run Code Online (Sandbox Code Playgroud)
并被称为像
myMyclass = myClass({@(x)exp(x)})
myMyClass.f();
Run Code Online (Sandbox Code Playgroud)