我正在尝试使用该RPostgreSQL包从R内部连接到远程PostgreSQL数据库,并且我收到的错误似乎与连接的SSL设置有关.我已经验证我可以使用命令行连接psql,所以我知道连接是有效的并且可以从我的计算机访问.
我在R中连接的第一次尝试是以下(其中<MyHost>,并<MyPass>得到适当填写我的连接):
library(RPostgreSQL)
pg <- dbDriver( 'PostgreSQL' )
con = dbConnect( pg, host=<MyHost>, dbname='warehouse',
user='warehouse', password=<MyPass>, port=5432 )
Run Code Online (Sandbox Code Playgroud)
我收到的错误是:
RS-DBI driver: (could not connect warehouse@<MyHost>.com:5432 on
dbname "warehouse": FATAL: no pg_hba.conf entry for host "75.166.243.177",
user "warehouse", database "warehouse", SSL off
Run Code Online (Sandbox Code Playgroud)
我理解这意味着我需要对我的连接应用SSL加密,所以我尝试了以下,这似乎适用于OP:使用R通过SSL连接到Postgres
library(RPostgreSQL)
pg <- dbDriver( 'PostgreSQL' )
con = dbConnect( pg, host=<MyHost>, dbname='dbname=warehouse sslmode=require',
user='warehouse', password=<MyPass>, port=5432 )
Run Code Online (Sandbox Code Playgroud)
我收到的错误是:
RS-DBI driver: (could not connect warehouse@<MyHost>:5432 on dbname
"warehouse": sslmode value …Run Code Online (Sandbox Code Playgroud) 我很好奇为什么ifelse()调用中的语句dplyr::mutate()似乎只适用于我的数据框的第一行。这将返回一个值,该值在整个列中循环使用。由于在这两种情况下评估的表达式ifelse()仅在我的数据框上下文中有效,我希望条件检查和结果表达式评估作为一个整体对列执行,而不仅仅是它们的第一个元素。
这是一个例子:我在数据框外定义了一个名为checkVar. 根据 的值checkVar,我想将不同的值添加到新列 中的数据框中z,这些值是作为现有列的函数计算的。
如果我做
checkVar <- 1
df <- data.frame( x=11:15, y=1:5 ) %>%
dplyr::mutate( z=ifelse(checkVar == 1, x/y, x-y) )
df
Run Code Online (Sandbox Code Playgroud)
它返回
x y z
1 11 1 11
2 12 2 11
3 13 3 11
4 14 4 11
5 15 5 11
Run Code Online (Sandbox Code Playgroud)
z 不是每行的 x 和 y 的商,而是所有行都填充有来自数据帧第一行的 x 和 y 的商。
但是,如果我指定rowwise(),我会得到我想要的结果:
df <- df %>%
dplyr::rowwise() %>%
dplyr::mutate( …Run Code Online (Sandbox Code Playgroud) 我正在努力使用dplyrR中的编程来操作数据帧的列,这些列只能通过它们的字符串名称来识别.我知道最近有一个dplyr支持quouts等的更新,我在这里回顾了我认为新的"用dplyr编程"一文的相关组成部分:http://dplyr.tidyverse.org/articles/programming .html.但是,我仍然无法做我想做的事.
我的情况是我只知道数据框的字符串名称.因此,我无法dplyr在函数内调用甚至是在运行之间列名可能会更改的脚本中使用非标准求值,因为我不能硬编码未加引号(即"裸")列名称.我想知道如何解决这个问题,我猜我用新的引用/取消引用语法忽略了一些东西.
例如,假设我有用户输入来定义数据分布的截止百分位数.用户可以使用他/她想要的任何百分位来运行代码,并且他/她选择的百分位将改变输出.在分析中,使用所使用的百分位名称创建中间数据框中的列; 因此,该列的名称根据用户输入的截止百分位数而变化.
下面是一个最小的例子来说明.我想用截止百分位数的各种值来调用函数.我希望命名的数据框MPGCutoffs有一个根据所选截止分位数命名的列(这当前在下面的代码中有效),我想稍后对这个列名进行操作.由于这个列名的一般性,我只能在pctCutoff编写函数时根据输入知道它,所以我需要一种方法来操作它,只知道定义的字符串probColName,它遵循基于预定义的模式关于价值pctCutoff.
userInput_prob1 <- 0.95
userInput_prob2 <- 0.9
# Function to get cars that have the "best" MPG
# fuel economy, where "best" is defined by the
# percentile cutoff passed to the function.
getBestMPG <- function( pctCutoff ){
# Define new column name to hold the MPG percentile cutoff.
probColName <- paste0('P', pctCutoff*100)
# Compute the MPG percentile …Run Code Online (Sandbox Code Playgroud) r ×3
dplyr ×2
conditional ×1
database ×1
dynamic ×1
mutate ×1
postgresql ×1
quoting ×1
rlang ×1
rpostgresql ×1
ssl ×1