根据帮助,is.recursive(x)“如果 x 具有递归(类似列表)结构,则返回 TRUE,否则返回 FALSE”。我很困惑为什么当 x 是函数时它返回 TRUE 。例如:
is.recursive(mean)
# [1] TRUE
Run Code Online (Sandbox Code Playgroud)
但函数似乎不能在任何有意义的意义上递归,特别是因为它们甚至不能子集:
mean[[1]]
# Error in mean[[1]] : object of type 'closure' is not subsettable
Run Code Online (Sandbox Code Playgroud)
这是 R 源代码中的疏忽,还是有合理的理由认为函数应该被视为递归?
我想data.table通过引用将两个合并在一起,而不必写下我要合并的所有变量。这是一个了解我的需求的简单示例:
set.seed(20170711)
(a <- data.table(v_key=seq(1, 5), key="v_key"))
# v_key
#1: 1
#2: 2
#3: 3
#4: 4
#5: 5
a_backup <- copy(a)
(b <- data.table(v_key=seq(1, 5), v1=runif(5), v2=runif(5), v3=runif(5), key="v_key"))
# v_key v1 v2 v3
#1: 1 0.141804303 0.1311052 0.354798849
#2: 2 0.425955903 0.3635612 0.950234261
#3: 3 0.001070379 0.4615936 0.359660693
#4: 4 0.453054854 0.5768500 0.008470552
#5: 5 0.951767837 0.1649903 0.565894298
Run Code Online (Sandbox Code Playgroud)
我想在不指定列名的情况下将每个列复制b到a引用中。
我可以执行以下操作,但这会无缘无故地复制对象,从而降低程序性能并增加所需的RAM:
(a <- a[b])
# v_key v1 v2 v3
#1: 1 0.141804303 0.1311052 …Run Code Online (Sandbox Code Playgroud) 以下用于在ggplot2中生成小提琴图:
ggplot(violin,aes(x=variable,y=log(value+0.5),color=Group)) +
geom_violin(scale="width") +
geom_jitter(aes(group=Group), position=position_jitterdodge()) +
stat_summary(fun.y="mean",geom="crossbar", mapping=aes(ymin=..y.., ymax=..y..),
width=1, position=position_dodge(),show.legend = FALSE) +
theme(axis.text.x = element_text(angle = 45, margin=margin(0.5, unit="cm")))
Run Code Online (Sandbox Code Playgroud)
得到的情节看起来如下;
正如你所看到的,有些点在小提琴形状的边界外抖动,我需要把这些点放在小提琴里面.我玩过不同程度的抖动,但都取得了成功.我很欣赏任何能够实现这一目标的指示.
我有一堆来自同一主题的研究的“配对”观察结果,我正在尝试构建一个意大利面条图来可视化这些观察结果,如下所示:
library(plotly)
df <- data.frame(id = rep(1:10, 2),
type = c(rep('a', 10), rep('b', 10)),
state = rep(c(0, 1), 10),
values = c(rnorm(10, 2, 0.5), rnorm(10, -2, 0.5)))
df <- df[order(df$id), ]
plot_ly(df, x = type, y = values, group = id, type = 'line') %>%
layout(showlegend = FALSE)
Run Code Online (Sandbox Code Playgroud)
它产生了我正在寻找的正确情节。但是,代码以自己的颜色显示了每个分组的行,这真的很烦人,让人分心。我似乎无法找到摆脱颜色的方法。
额外问题:我实际上想使用color = state该变量并实际为斜线着色。
任何方法/想法?
我正在使用corrplot来显示相关性,但是标题在情节之上非常高,我想把它拉得更近.我该怎么做呢?
示例数据帧:
"VADeaths" <-
structure(c(11.7, 18.1, 26.9, 41, 66, 8.7, 11.7, 20.3, 30.9, 54.3, 15.4,
24.3, 37, 54.6, 71.1, 8.4, 13.6, 19.3, 35.1, 50), .Dim = c(5, 4),
.Dimnames = list(c("50-54", "55-59", "60-64", "65-69", "70-74"),
c("Rural Male", "Rural Female", "Urban Male", "Urban Female")))
Run Code Online (Sandbox Code Playgroud)
计算相关性并可视化
library(corrplot)
cors = cor(VADeaths)
corrplot(cors,tl.col="black",title="Example Plot",mar=c(0,0,5,0),tl.offset = 1)
Run Code Online (Sandbox Code Playgroud)
通过将边距扩展到图表上方的5,我至少可以使标题出现在图中,但无法弄清楚如何使标题更接近图并以图表为中心而不是标签占用的空间.
以上看起来像这样:
我想要更像这样的东西(忽略字体)
我的实际情节标签要小得多,因此标签与标题之间的间隙约为3-4厘米.我没有发现增加mar的价值解决了这个问题.
我正在尝试将通过将 excel 文件解压缩回 excel .xlsx 创建的 xml 文件夹转换。但我得到了错误
Microsoft Excel 无法打开或修复工作簿,因为它已损坏
生成此错误的最小可重现示例:
test.xlsxtest.ziptest.zip为文件夹testtest成test_new.ziptest_new.zip为test_new.xlsxtest_new.xlsx用 Excel打开对于压缩和解压缩,我使用了 7zip、WinZip 和 PeaZip,都具有相同的结果。我做错了什么,如何将解压缩的 Excel 工作簿恢复为原始形式?
这是我第二次在线搜索 download.file 的帮助并通过调用模式参数解决了我的问题,但我不知道原因是什么或何时/为什么使用它们。刚刚看到建议并通过了论点来解决我的问题。
\n\ndownload.file() 上的 R 帮助文件有点太简短,没有告诉我何时使用特定模式
\n\n\n\n\n模式字符。写入文件的模式。有用的值包括“w”、“wb”(二进制)、“a”(追加)和“ab”。仅用于“内部”\n 方法。(另请参见 \xe2\x80\x98Details\xe2\x80\x99。)
\n
为了得到正确的答案,我必须通过下面的 mode="wb" ;但为什么(也许与 https 中的 s 有关,或者我现在应该进行尝试和错误)。
\n\nfileUrl <-"https://d396qusza40orc.cloudfront.net/getdata%2Fjeff.jpg"\ndownload.file(fileUrl, destfile = "./data/leekjpg.jpg", mode="wb")\nRun Code Online (Sandbox Code Playgroud)\n\n我想至少对 download.file 中的方法和模式参数有一些初步的了解,并且希望您能提供解释或建议性的阅读。
\n\n我正在下载更多文件,但令我困扰的是我不知道何时传递一些相关参数。
\n我希望我的 C 函数能够操作存储在 R 数据框中的一些值。
为了实现这一点,需要 R 数据帧存储其数据的(真实)内存地址(希望以连续的方式);然后从 R 调用 C 函数并将此内存地址作为参数传递。
问题:我们如何获得R数据帧的内存地址?
我想将 data.frame 作为参数传递给带有可选列的 Rcpp 函数。然后,C++ 函数需要测试列是否存在。如果我像下面的示例一样使用 Sugar 函数any,则会出现编译错误。
cppFunction(
'double test(DataFrame test_data) {
double x=NA_REAL;
CharacterVector colnames = CharacterVector::create("foo");
CharacterVector df_names = test_data.names();
if (any(df_names == colnames)) x = 1.0;
return(x);
}')
Run Code Online (Sandbox Code Playgroud)
无效使用不完整类型类 Rcpp::sugar::forbidden_conversion`
我知道我可以在循环中一一测试字符值,如下所示(按预期工作):
cppFunction(
'double test(DataFrame test_data) {
double x=NA_REAL;
CharacterVector colnames = CharacterVector::create("foo");
CharacterVector df_names = test_data.names();
for (int i=0; i<df_names.length(); i++) {
if (df_names[i] == colnames[i]) x = 1.0;
}
return(x);
}')
test(data.frame(bar=3))
# [1] NA
test(data.frame(foo=3))
# [1] 1
Run Code Online (Sandbox Code Playgroud)
但是,如果可能的话,我想使用矢量化的“糖”版本。我做错了什么,我该怎么做?
在c ++中有移位操作
>> right shift
<< left shift
Run Code Online (Sandbox Code Playgroud)
这被认为是非常快的.
我试图在R中应用相同的但似乎是错的.
在R中有类似的操作是否与此一样快?
提前致谢.
r ×9
excel ×2
rcpp ×2
xml ×2
7zip ×1
c ×1
c++ ×1
data.table ×1
ggplot2 ×1
plotly ×1
r-corrplot ×1
vba ×1
violin-plot ×1
zip ×1