我希望用户能够在R中以交互方式选择目录.解决方案需要在不同的平台上工作(至少在具有图形桌面环境的Linux,Windows和Mac机器上).它需要足够强大,才能在各种计算机上运行.我遇到了我所知道的变种问题:
file.choose() 不幸的是只适用于文件 - 它不允许选择目录.除了这个限制之外,它file.choose是我正在寻找的解决方案类型的一个很好的例子 - 它可以跨平台工作,并且没有可能在特定计算机上不可用的外部依赖性.
choose.dir() 仅适用于Windows.
tk_choose.dir()从library(tcltk)是我的首选解决方案,直到最近.但我有用户报告这会引发错误
log4cplus:ERROR找不到记录器(AdSyncNamespace)的appender.log4cplus:ERROR请正确初始化log4cplus系统.
我们追溯到正在安装的Autodesk360软件,由于某种原因干扰了tcltk.所以这不是一个合适的解决方案,除非有一个解决方案.(我通过Google搜索找到的唯一解决方案是卸载Autodesk360,这对于安装它的用户来说不是解决方案,因为他们实际使用它).
这个答案表明以下可能的替代方案:
library(rJava)
library(rChoiceDialogs)
jchoose.dir()
Run Code Online (Sandbox Code Playgroud)
但是,作为一个可能出错的事情的一个例子,当我试图install.packages("rJava")得到时:
检查是否可以编译JNI程序... configure:error:无法编译简单的JNI程序.有关详细信息,请参阅config.log.
确保安装了Java Development Kit并在R中正确注册.如果有疑问,请以root身份重新运行"R CMD javareconf".
错误:包'rJava'的配置失败*删除'/home/dominic/R/x86_64-pc-linux-gnu-library/3.3/rJava'install.packages中的警告:包'rJava'的安装具有非零退出状态
我设法通过使用linux包管理器安装openjdk编译器然后运行来修复我自己的机器(运行openJDK的linux)sudo R CMD javareconf.但我不能指望具有不同计算机专业水平的随机用户必须跳过篮球才能选择目录.即使他们确实设法修复它,当他们使用的每一个其他软件都能够毫无问题地打开目录选择对话时,它看起来也会很糟糕.
所以我的问题是:是否存在一种可靠的方法,可以file.choose在各种平台上可靠地预期"正常工作"(就像文件一样)并且不会期望最终用户具有足够的计算机知识来解决这些问题(例如与Autodesk360的不兼容性或未解析的Java依赖项)?
我试图向我的儿子展示如何使用编码来解决游戏带来的问题,以及了解 R 如何处理大数据。有问题的游戏被称为“幸运26”。在这个游戏中,数字(1-12 没有重复)位于大卫之星上的 12 个点上(6 个顶点,6 个交点),4 个数字的 6 行必须全部加起来为 26。在大约 4.79 亿种可能性中(12P12 ) 显然有 144 个解决方案。我尝试在 R 中编写如下代码,但内存似乎是一个问题。如果成员有时间,我将不胜感激任何建议以推进答案。提前感谢会员。
library(gtools)
x=c()
elements <- 12
for (i in 1:elements)
{
x[i]<-i
}
soln=c()
y<-permutations(n=elements,r=elements,v=x)
j<-nrow(y)
for (i in 1:j)
{
L1 <- y[i,1] + y[i,3] + y[i,6] + y[i,8]
L2 <- y[i,1] + y[i,4] + y[i,7] + y[i,11]
L3 <- y[i,8] + y[i,9] + y[i,10] + y[i,11]
L4 <- y[i,2] + y[i,3] + y[i,4] + y[i,5]
L5 <- y[i,2] + …Run Code Online (Sandbox Code Playgroud) 我有点困难,想弄清楚如何使用plotly重建蜘蛛(或雷达)图表的下图.实际上,我甚至无法在最新版本的ggplot2中重新创建它,因为自1.0.1以来已经发生了重大变化.
这是一个示例图形:
这是构建它的原始函数:
http://pcwww.liv.ac.uk/~william/Geodemographic%20Classifiability/func%20CreateRadialPlot.r
以下是原始函数如何工作的示例:
http://rstudio-pubs-static.s3.amazonaws.com/5795_e6e6411731bb4f1b9cc7eb49499c2082.html
这里有一些不那么虚假的数据:
d <- structure(list(Year = rep(c("2015","2016"),each=24),
Response = structure(rep(1L:24L,2),
.Label = c("Trustworthy", "Supportive", "Leading",
"Strong", "Dependable", "Consultative",
"Knowledgeable", "Sensible",
"Intelligent", "Consistent", "Stable",
"Innovative", "Aggressive",
"Conservative", "Visionary",
"Arrogant", "Professional",
"Responsive", "Confident", "Accessible",
"Timely", "Focused", "Niche", "None"),
class = "factor"),
Proportion = c(0.54, 0.48, 0.33, 0.35, 0.47, 0.3, 0.43, 0.29, 0.36,
0.38, 0.45, 0.32, 0.27, 0.22, 0.26,0.95, 0.57, 0.42,
0.38, 0.5, 0.31, 0.31, 0.12, 0.88, 0.55, 0.55, 0.31,
0.4, 0.5, 0.34, 0.53, 0.3, 0.41, 0.41, 0.46, …Run Code Online (Sandbox Code Playgroud) 我想在ggplot2中使用geom_ribbon来绘制阴影置信区间.但是,如果其中一条线超出设定的y限制,则会切断色带而不会延伸到绘图的边缘.
最小的例子
x <- 0:100
y1 <- 10+x
y2 <- 50-x
ggplot() + theme_bw() +
scale_x_continuous(name = "x", limits = c(0,100)) +
scale_y_continuous(name = "y", limits = c(-20,100)) +
geom_ribbon(aes(x=x, ymin=y2-20, ymax=y2+20), alpha=0.2, fill="#009292") +
geom_line(aes(x=x , y=y1)) +
geom_line(aes(x=x , y=y2))
Run Code Online (Sandbox Code Playgroud)
我想要的是重现与基础R中绘图相同的行为,其中着色延伸到边缘
plot(x, y1, type="l", xlim=c(0,100),ylim=c(-20,100))
lines(x,y2)
polygon(c(x,rev(x)), c(y2-20,rev(y2+20)), col="#00929233", border=NA)
Run Code Online (Sandbox Code Playgroud)
我想x在另一个查找向量中查找向量的所有匹配项的索引table。
table = rep(1:5, each=3)
x = c(2, 5, 2, 6)
Run Code Online (Sandbox Code Playgroud)
标准的基本 R 方法并不能完全满足我的需求。例如使用which(table %in% x)我们只获得一次匹配索引,即使2在中出现两次x
which(table %in% x)
# [1] 4 5 6 13 14 15
Run Code Online (Sandbox Code Playgroud)
另一方面,match返回每次出现匹配的 x 的值,但仅返回查找表中的第一个索引。
match(x, table)
# [1] 4 13 4 NA
Run Code Online (Sandbox Code Playgroud)
我想要的是一个返回“所有 x 和所有 y”索引的函数。即它应该返回以下期望的结果:
mymatch(x, table)
# c(4, 5, 6, 13, 14, 15, 4, 5, 6)
Run Code Online (Sandbox Code Playgroud)
当然,我们可以使用 R 中的循环来完成此操作:
mymatch = function(x, table) {
matches = sapply(x, \(xx) which(table %in% xx)) …Run Code Online (Sandbox Code Playgroud) 考虑以下(excel)数据集:
m | r
----|------
2.0 | 3.3
0.8 |
| 4.0
1.3 |
2.1 | 5.2
| 2.3
| 1.9
2.5 |
1.2 | 3.0
2.0 | 2.6
Run Code Online (Sandbox Code Playgroud)
我的目标是使用以下条件填写缺失值:
将上述两列(约0.68)之间的成对相关性表示为R. 在填充空单元格之后将相关性表示为R*.填写表格以使(R-R*)^ 2 = 0.这是,我想保持数据的相关结构完整.
到目前为止,我已经使用Matlab完成了它:
clear all;
m = xlsread('data.xlsx','A2:A11') ;
r = xlsread('data.xlsx','B2:B11') ;
rho = corr(m,r,'rows','pairwise');
x0 = [1,1,1,1,1,1];
lb = [0,0,0,0,0,0];
f = @(x)my_correl(x,rho);
SOL = fmincon(f,x0,[],[],[],[],lb)
Run Code Online (Sandbox Code Playgroud)
功能my_correl是:
function X = my_correl(x,rho)
sum_m = (11.9 + x(1) + x(2) + …Run Code Online (Sandbox Code Playgroud) 我正在使用as.data.frame()函数将表转换为R中的数据帧,我想用函数设置列名.
我发现有一个可选的参数为as.data.frame(),是col.names.
文档说它是列名的字符向量.但是,无论我放入什么col.names,结果都保持不变.
x = c('a','b','c','a')
x_table = table(x)
x_df = as.data.frame(x_table, col.names = c('name', 'freq'))
Run Code Online (Sandbox Code Playgroud)
这里的输出是:
x Freq
1 a 2
2 b 1
3 c 1
Run Code Online (Sandbox Code Playgroud)
我知道colnames(df)在创建数据帧后我可以使用更改列名,但我真的很想知道为什么col.names在这里不起作用.
谢谢.
这是一个阴谋"气泡"地图(即带有标记的地图,其大小映射到变量).但是,图例仅显示颜色类别,但不显示尺寸与值的关系.
library(plotly)
DF = data.frame(
Group = c("A", "B", "A", "B", "A", "C", "C"),
Value = c(100, 80, 90, 150, 120, 60, 110),
lat = c( 40, 32, 36, 44, 31, 39, 37),
long = c(-90, -100, -120, -110, -90, -80,-105))
plot_geo(DF, locationmode = 'USA-states') %>%
add_markers(y=~lat, x=~long, color=~Group, size=~Value,
marker=list(sizeref=0.1, sizemode="area")) %>%
layout(geo=list(scope = 'usa'))
Run Code Online (Sandbox Code Playgroud)
此问题显示如何控制标记的大小,但不回答如何在图例中显示这些大小.在这个和这个问题中,我们可以看到,如果每个类别只有一个与之关联的标记大小,那么图例将显示缩放到它们在气泡图中的大小的标记.但这在这里没有用.情节网站上有泡泡图和气泡图的例子,但这些都没有尺寸图例.
有没有办法将标记大小的图例添加到图表中的气泡图/地图中?上面的例子使用R api,但使用另一个plotly api(例如python)的答案也是可以接受的.
我已经在原帖中链接了这个问题,并解释了为什么它不同.但是让我试着更清楚地解释一下这个区别,因为有人已将它标记为可能重复...
链接的问题涉及由于在数据中每个类别只有一个尺寸而在图例中显示不同气泡大小的人.相比之下,该示例中的类别各自具有不同大小的气泡.链接问题中的OP想知道如何摆脱图例中的不同大小 …
我正在使用 geom_path 绘制平均值的时间序列,并使用 geom_ribbon 添加具有最小值最大值的功能区。时间序列中存在一些数据差距,但该图保持连接线。在附图中,最后一个面板显示了数据中的差距。该数据没有 x 或 y 条目。有什么办法可以控制这个吗?
这是我的顶部面板的绘图代码:
ggplot(stat_total, aes(color=gas)) +
geom_path(aes(x=date_mean, y=conc_mean, color=gas), size=1.2, na.rm = T) +
geom_ribbon(aes(x=date_mean, ymin=conc_min, ymax=conc_max, fill=gas), color="grey70", alpha=0.4, na.rm = T)+
scale_x_datetime(date_breaks = "3 weeks" , date_labels = "%d-%b") +
xlab(NULL) +
ylab('[ppb]') +
theme_bw() +
facet_wrap(gas~.,scales = 'free_x',ncol = 1,nrow=2)
Run Code Online (Sandbox Code Playgroud)
以及数据样本:
structure(list(day = c(6L, 6L, 7L, 7L, 8L, 8L, 9L, 9L, 10L, 10L,
11L, 11L, 12L, 12L, 13L, 13L, 15L, 15L, 16L, 16L, 17L, 17L, 18L,
18L, 20L, 20L, 21L, …Run Code Online (Sandbox Code Playgroud) 我想在向量中找到位置,其中值与向量中较早的点相差超过某个阈值.应该相对于矢量中的第一个值来测量第一个变化点.应相对于先前的变化点测量后续变化点.
我可以使用for循环来做到这一点,但我想知道是否有更惯用和更快的矢量化灵魂.
最小的例子:
set.seed(123)
x = cumsum(rnorm(500))
mindiff = 5.0
start = x[1]
changepoints = integer()
for (i in 1:length(x)) {
if (abs(x[i] - start) > mindiff) {
changepoints = c(changepoints, i)
start = x[i]
}
}
plot(x, type = 'l')
points(changepoints, x[changepoints], col='red')
Run Code Online (Sandbox Code Playgroud)