我正在努力简化一些数据库连接。使用该odbc包,我已成功与我的一个数据库建立了连接,如下所示:
library(odbc)
con <- dbConnect(odbc::odbc(), "db_name",
UID = "username",
PWD = "password")
Run Code Online (Sandbox Code Playgroud)
这有效,并且数据库架构按预期显示在连接窗格中(使用RStudio Server 1.1.383)
但是,我需要在用户定义的函数中调用此连接来解密我们的用户凭据。一个最小的例子:
db_Connect_mod <- function(userid,
password,
...){
# Needed Processes, but ommitted for simplicity of this question
# ...
con <- dbConnect(odbc::odbc(), "db_name",
UID = userid,
PWD = password)
return(con)
}
Run Code Online (Sandbox Code Playgroud)
然后我运行:
con <- db_Connect_mod(userid, password, ...)
Run Code Online (Sandbox Code Playgroud)
实际的数据库连接con成功,但它不再出现在 RStudio 连接窗格中。
我知道它odbc使用Connections Contract,但它似乎并没有延续到我的新函数中。有没有办法强制连接契约转移到顶层函数?
我研究过 using odbc:::on_connection_opened(con, code = "..."),它似乎有效,但不如从odbc我的新函数中继承连接契约那么功能,并且宁愿不依赖于非导出函数。
我相信此行为是由于odbc github 问题的更改所致
我有一个使用“xlsx”作为依赖项的包,如果我从本地文件安装库,该包会很好地安装。library(packagename)工作正常,所以做library(xlsx)and library(rJava)。我们刚刚开始实施一些急需的版本控制的过程,但是,当尝试从 git 存储库安装相同的包时,我收到以下错误:
devtools::install_git(path)
Run Code Online (Sandbox Code Playgroud)
...
** building package indices
** testing if installed package can be loaded
*** arch - i386
Error: package or namespace load failed for 'xlsx':
.onLoad failed in loadNamespace() for 'rJava', details:
call: fun(libname, pkgname)
error: No CurrentVersion entry in Software/JavaSoft registry! Try re-installing Java and make sure R and Java have matching architectures.
Error : package 'xlsx' could not be loaded
Error: loading failed
Execution halted
*** arch - …Run Code Online (Sandbox Code Playgroud) 我有如下所示的示例数据,其中对于一个单位,我有多次治疗,并且每次治疗在周期前后都有多个测量值。我想做一个前后比较,所以我gather, 和spread如下所示以达到所需的输出。
pivot_我的问题是:这可以用一个命令来完成吗?我一直在尝试找出正确构造是否spec可以实现这一目标,但尚未成功。下面是这样的一种尝试。
我想我会接受要么一种让它发挥作用的方法,要么接受一个关于如何或在一般工作中转向的清晰解释spec,以解释为什么这是不可能的。从旋转的小插图中,我想我明白了:
.name当旋转较长时,包含输入表中的唯一列名称.value包含在旋转较长时间时您希望在输出中包含的新列名称但是,我不知道附加列的含义spec或何时需要它们。我希望我spec能理解 的"before"值period应该进入名为 的列before,但显然它不是这样工作的。
library(tidyverse) # tidyr 0.8.99.9000
tbl <- tibble(
obsv_unit = rep(1:2, each = 4),
treatment = rep(c("A", "B"), each = 2, times = 2),
period = rep(c("before", "after"), times = 4),
measure1 = 1:8,
measure2 = 11:18
)
tbl
#> # A tibble: 8 x …Run Code Online (Sandbox Code Playgroud) 我希望只绘制落在频段内的测量百分比.我将它们分为低中和高中.但是当我绘制它们时,它将代表性地显示不显示值(参见图像,例如输出)
代码如下
percents <- data.frame(TI = c("Low","Med","High"),
percent = c(format((totallowcount/totalvaluescount)*100,digits=3),
format((totalmedcount/totalvaluescount)*100,digits=3),
format((totalhighcount/totalvaluescount)*100,digits=3)))
TIbarplot <- ggplot(data = percents, aes(x = TI, y = percent)) +
geom_bar(stat = 'identity') +
scale_x_discrete(limits = c("Low","Med","High"))
Run Code Online (Sandbox Code Playgroud)
我查看了做scale_y_discrete,scale_y_discrete(limits=c(0,25,50,100))但一直在为它获取错误.
Error in matrix(value, n, p) :
'data' must be of a vector type, was 'NULL'
In addition: Warning message:
Removed 3 rows containing missing values
(position_stack).
我有一个这样构造的数据集: 在此处输入图像描述
我想使用 V1、V2...等运行线性回归模型和方差分析。在每种情况下,g 列作为自变量,g 列作为因变量(即 lm(V1 ~ g)、lm(V2 ~ g) 等)。这很简单,只是这些线性回归需要按对列中的级别进行分组,例如,我的输出包含 lm(V1 ~ g) 对于所有具有对 1.1 的行,对于所有行都包含 lm(V1 ~ g)对 1.201 等
我尝试了多种使用 for 循环、lapply 和 data.table 包的方法,但没有任何方法能够准确地提供我想要的输出。谁能告诉我解决这个问题的最佳方法?
编辑:我的完整数据集在对列和 100 V 列 (V1...V100) 中有 7056 个不同的对。我对这个问题的最新尝试:
df$pair <- as.factor(df$pair)
out <- list()
for (i in 3:ncol(df)){
out[[i]] <- lapply(levels(df$pair), function(x) {
data.frame(df=x, g = coef(summary(lm(df[,i]~ df$g, data=df[df$pair==x,])),row.names=NULL))})
}
Run Code Online (Sandbox Code Playgroud) 在制作图形ggplot并使用viridis调色板后,我想获取为该特定绘图随机选择的所有颜色的十六进制颜色代码列表。那可能吗?
这是数据:
df = data.frame(Cell = c(rep("13a",5), rep("1b",5), rep("5b",5)),
condition = rep(c("a","b","c","d","e"), 3),
variable = c(58,55,36,29,53, 57,53,54,52,52, 45,49,48,46,45))
Run Code Online (Sandbox Code Playgroud)
情节:
library(ggplot2)
library(viridis)
windows(width=4, height=4 )
ggplot(df, aes(x = condition, y = variable, group = Cell, color = Cell)) +
geom_point(aes(color = Cell))+
geom_line()+
scale_color_viridis(discrete=TRUE)
Run Code Online (Sandbox Code Playgroud)