我最近注意到这rlang::sym似乎不适用于匿名函数,我不明白为什么.这是一个例子,它非常笨拙和丑陋,但我认为它说明了这一点
require(tidyverse)
data <- tibble(x1 = letters[1:3],
x2 = letters[4:6],
val = 1:3)
get_it <- function(a, b){
data %>%
mutate(y1 = !!rlang::sym(a)) %>%
mutate(y2 = !!rlang::sym(b)) %>%
select(y1, y2, val)
}
get_it("x1", "x2")
Run Code Online (Sandbox Code Playgroud)
这定义了一些玩具数据和一个(可怕的)函数,它基本上根据列名重命名列.现在我可以为a和b的不同组合做同样的事情:
d <- tibble(x = c("x1", "x2"),
y = c("x2", "x1"))
d %>% mutate(tmp = map2(x, y, get_it))
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试使用匿名函数执行完全相同的操作,则它不起作用:
d %>% mutate(tmp = map2(x, y, function(a, b){
data %>%
mutate(y1 = !!rlang::sym(a)) %>%
mutate(y2 = !!rlang::sym(b)) %>%
select(y1, y2, val)
}))
Run Code Online (Sandbox Code Playgroud)
object 'a' not found …
如果在R函数中使用全局变量,有没有办法抛出警告(并失败..)?我认为这样可以避免意外行为......例如
sUm <- 10
sum <- function(x,y){
sum = x+y
return(sUm)
}
Run Code Online (Sandbox Code Playgroud)
由于"拼写错误"的回报,该功能将永远返回10.而不是返回sUm它的值应该失败.
对于 conda yml 文件,可以使用 pip 作为从 github 定义 python 依赖项
name: sample_env
channels:
dependencies:
- python=2.7
- pip:
- git+https://github.com/my/repository
Run Code Online (Sandbox Code Playgroud)
有没有办法对 R 包使用类似的方法(例如使用 devtools)使用类似的方法
name: sample_env
channels:
dependencies:
- R=3.6
- devtools:
- git+https://github.com/my/repository
Run Code Online (Sandbox Code Playgroud) 我使用R(版本3.1.2)和包VennDiagram(版本1.6.16).
自从我上次更新VennDiagram包创建一个名为一个日志文件VennDiagramDATE_TIME.log(与DATE和TIME是日期和时间创建)在当前的工作目录.
怎么能压制这个日志文件?或者在图表完成后立即删除它?我在手册中没有找到任何相关内容......
我有以下示例文件:
"id";"PCA0";"PCA1";"PCA2"
1;6.142741644872954;1.2075898020608253;1.8946959360032403
2;-0.5329026419681557;-8.586870627925729;4.510113575138726
Run Code Online (Sandbox Code Playgroud)
当我尝试阅读时:
d <- read.table("file.csv", sep=";", header=T)
Run Code Online (Sandbox Code Playgroud)
id是一个整数列,PCA0一个数字,所有后续列都是因子
class(d$iid)
[1] "integer"
class(d$PCA0)
[1] "numeric"
class(d$PCA1)
[1] "factor"
class(d$PCA2)
[1] "factor"
Run Code Online (Sandbox Code Playgroud)
为什么其他列也不是数字?
我知道如何转换列,但我希望我的脚本能够在不手动转换类型的情况下工作.为什么R不识别数字列?
我正在尝试使用Font Awesome而不是任何图标,它只显示任何亚洲标志.我为web服务器下载了字体awsome.我在3种不同的浏览器(firefox,opera和chromium)中尝试了这个,但它总是一样的.
可在此处查看测试页:http://2weitweitweg.de/test.html
以下是它的截图:http://postimg.org/image/9yh5p0p97/
它是否在您的浏览器中显示标志?问题与浏览器或服务器有关吗?我该如何解决?
再见
如果有以下数据
d = data.frame(out=rnorm(10), explain=rnorm(10), age=rnorm(10), sex=sample(c("M", "F"), size=10, replace=T), group=rep(c(1:5), 2))
f = as.formula("out ~ explain + age + sex + (1|group)")
Run Code Online (Sandbox Code Playgroud)
并且想要使用lme4拟合线性模型
require(lme4)
require(lmerTest)
m = lmer(f, d)
s = summary(m)
Run Code Online (Sandbox Code Playgroud)
这很好用......但是如果模型适合于另一个函数
gglm = function(form, data){
lm = lmer(form, data=data)
return(lm)
}
m2 = gglm(f, d)
s2 = summary(m2)
Run Code Online (Sandbox Code Playgroud)
我收到一个错误.
summary from lme4 is returned
some computational error has occurred in lmerTest
Run Code Online (Sandbox Code Playgroud)
显然,这是因为模型的拟合是通过一个被调用的对象完成的,该对象data在外部范围内是不可见的.所以,如果我这样做,data = d我会得到与以前相同的结果.但是,如果我这样做
data = data.frame(out=rnorm(10), explain=rnorm(10), age=rnorm(10), sex=sample(c("M", "F"), size=10, replace=T), …Run Code Online (Sandbox Code Playgroud) 我使用 R 分析数据,使用 ggplot 创建绘图,使用 tikzDevice 打印它们,最后使用 Latex 来创建报告。问题是由于乳胶的内存限制,具有许多点的大图会失败。我在这里找到了https://github.com/yihui/tikzDevice/issues/103一个在打印 tikz 文件之前光栅化绘图的解决方案,它允许单独打印点和文本。
require(png)
require(ggplot2)
require(tikzDevice)
## generate data
n=1000000; x=rnorm(n); y=rnorm(n)
## first try primitive
tikz("test.tex",standAlone=TRUE)
plot(x,y)
dev.off()
## fails due to memory
system("pdflatex test.tex")
## rasterise points first
png("inner.png",width=8,height=6,units="in",res=300,bg="transparent")
par(mar=c(0,0,0,0))
plot.new(); plot.window(range(x), range(y))
usr <- par("usr")
points(x,y)
dev.off()
# create tikz file with rasterised points
im <- readPNG("inner.png",native=TRUE)
tikz("test.tex",7,6,standAlone=TRUE)
plot.new()
plot.window(usr[1:2],usr[3:4],xaxs="i",yaxs="i")
rasterImage(im, usr[1],usr[3],usr[2],usr[4])
axis(1); axis(2); box(); title(xlab="x",ylab="y")
dev.off()
## this works
system("pdflatex test.tex")
## now with ggplot
p …Run Code Online (Sandbox Code Playgroud) 我正在使用该R软件包bnlearn来估计贝叶斯网络结构.它使用parallel包内置并行化.但是,这不起作用.
使用联机帮助页中的示例bnlearn::parallel integration:
library(parallel)
library(bnlearn)
cl = makeCluster(2)
# check it works.
clusterEvalQ(cl, runif(10)) # -> this works
data(learning.test)
res = gs(learning.test, cluster = cl)
Run Code Online (Sandbox Code Playgroud)
我在这里得到错误 "Error in check.cluster(cluster) : cluster is not a valid cluster object."
有人知道怎么做这个吗?
我正在寻找一种获得一个p值的方法,该值描述了glm模型的拟合优度.以下是手册lm页中略有修改的示例:
ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
conf<- c(rnorm(mean=-1, sd=1, n=10), rnorm(mean=1, sd=1, n=10))
group <- gl(2,10,20, labels=c("Ctl","Trt"))
weight <- c(ctl, trt)
lm.D9 <- lm(weight ~ group + conf)
Run Code Online (Sandbox Code Playgroud)
有summary(lm.D9)一个得到
Call:
lm(formula = weight ~ group + conf)
Residuals:
Min 1Q Median 3Q Max
-1.17619 -0.40373 -0.05262 0.24987 1.40777
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.97416 0.25153 19.775 3.6e-13 ***
groupTrt -0.23724 0.41117 -0.577 0.572
conf -0.07044 0.13725 -0.513 0.614
---
Signif. codes: 0 …Run Code Online (Sandbox Code Playgroud) 我连接到远程计算机,ssh并在远程计算机上启动byobu会话。每当我在byobu窗口中更改目录时,该窗口都会重命名为username@remote-pc:~/.../.../...。当我使用F8该名称重命名窗口时,该名称将一直保留到下一个窗口cd。
我该如何预防?