嗨,我有来自cran的rJava包的问题.
我安装了
sudo apt-get install openjdk-7-jdk
sudo apt-get install r-cran-rjava
Run Code Online (Sandbox Code Playgroud)
跑了
sudo R CMD javareconf
# Java interpreter : /usr/bin/java
# Java version : 1.7.0_55
# Java home path : /usr/lib/jvm/java-7-openjdk-amd64/jre
# Java compiler : /usr/bin/javac
# Java headers gen.: /usr/bin/javah
# Java archive tool: /usr/bin/jar
Run Code Online (Sandbox Code Playgroud)
然后我尝试运行R并加载rJava并得到以下错误:
R
> library(rJava)
Error : .onLoad failed in loadNamespace() for 'rJava', details:
call: dyn.load(file, DLLpath = DLLpath, ...)
error: unable to load shared object '/usr/lib/R/site-library/rJava/libs/rJava.so':
libjvm.so: cannot open shared object file: No such …
Run Code Online (Sandbox Code Playgroud) 我整天都在苦苦挣扎,我有点解决它(可怕的黑客).然而,经验不平滑并且显示副作用.
我想要的是三个滑块,其范围为0到100约束,使得它们的总和应该总是100.
这是它的样子截图
这是server.R闪亮的代码.
library(shiny)
oldState<-NULL
newState<-NULL
getState<-function(input) c(input$slider1, input$slider2, input$slider3)
# Define server logic required
shinyServer(function(input, output, session) {
observe({
newState<<-getState(input)
i<-which(oldState-newState != 0)[1]
if(!is.na(i)){
rem <- 100-newState[i]
a<-sum(newState[-i])
if(a==0) newState[-i]<<-rem/length(newState[-i])
else newState[-i]<<-rem*(newState[-i]/a)
for(j in 1:length(newState))
if(j!=i)
updateSliderInput(session, paste0("slider", j), value=newState[j])
}
oldState<<-newState
})
output$restable <- renderTable({
myvals<-getState(input)
myvals<-c(myvals, sum(myvals))
data.frame(Names=c("Slider 1", "Slider 2", "Slider 3", "Sum"),
Values=myvals)
})
})
Run Code Online (Sandbox Code Playgroud)
这是ui.R闪亮的代码
library(shiny)
# Define UI for application
shinyUI(pageWithSidebar(
# Application title
headerPanel("Sliders should sum to 100!"),
# Sidebar with …
Run Code Online (Sandbox Code Playgroud) 我有一个名为mydata的data.frame和一个包含data.frame中列的索引的矢量id,我想将其转换为因子.现在,以下代码解决了这个问题
for(i in ids) mydata[, i]<-as.factor(mydata[, i])
Run Code Online (Sandbox Code Playgroud)
现在我想通过使用apply而不是显式的for循环来清理这段代码.
mydata[, ids]<-apply(mydata[, ids], 2, as.factor)
Run Code Online (Sandbox Code Playgroud)
但是,最后一个语句给了我一个data.frame,其中类型是字符而不是因素.我没有看到这两行代码之间的区别.为什么他们不会产生相同的结果?
亲切的问候,迈克尔
我一直在使用R中的qcc包中的pareto.chart函数,我真的很喜欢它.现在我想将所有图形移植到ggplot2包中.但是,尽管有很好的文档,但我对ggplot2的了解非常有限,所以我无法弄清楚所有的细节.基本上我想要一个看起来像这样的情节
但改为使用ggplot2包.制作情节的代码如下:
library(qcc)
defect <- c(80, 27, 66, 94, 33)
names(defect) <- c("price code", "schedule date", "supplier code", "contact num.", "part num.")
pareto.chart(defect, ylab = "Error frequency", col=heat.colors(length(defect)))
Run Code Online (Sandbox Code Playgroud)
有人有解决方案吗?之前已经讨论过帕累托图表,但结果与我想要的结果并不相似.
我在Windows XP计算机上有一个位于目录中的文件,其中包含丹麦语字符.我使用Strawberry perl并希望阅读此文件.以下代码工作正常:
use Win32::Unicode::File;
# Some code left out....
$fname = $mw -> getOpenFile(-filetypes=>$types);
my $fh = Win32::Unicode::File->new;
$fh->open('<', $fname);
Run Code Online (Sandbox Code Playgroud)
getOpenFile例程来自Tk.现在由于某种原因,Win32 :: Unicode :: File有一些我不能忍受的不幸副作用(它吃了我的记忆,看到"内存不足"与简单的Win32 :: Unicode :: File readline循环和Strawberry Perl).现在如果我尝试在没有Win32 :: Unicode :: File接口的情况下打开文件,我会找不到找到的文件.原因是路径被错误地解释了.我已经尝试根据Perl转换路径:在Windows上管理路径编码因某些原因无效.我该怎么解决这个问题?我尝试过以下方法:
use Encode;
# Some code left out....
$fname = $mw -> getOpenFile(-filetypes=>$types);
my $fh;
open($fh, '<', encode("utf8",$fname,Encode::FB_CROAK));
Run Code Online (Sandbox Code Playgroud)
它不起作用.有任何想法吗?
如果我不清楚,请原谅我.
亲切的问候,迈克尔
我非常希望使用纯ggplot2方法重新创建此图,因为我想使用该包解决所有绘图.
下面给出了生成这个特定图的代码.
library(PerformanceAnalytics)
library(quantmod)
getSymbols(c('SPY','LQD','GLD'))
Data <- cbind(Cl(SPY),Cl(LQD),Cl(GLD))
Year <- as.factor(format(index(Data),'%Y'))
chart.Correlation(Data,bg=seq(1:5)[Year],pch=21)
par(xpd=TRUE)
legend(0, 1, as.vector(unique(Year)), fill=seq(1:5))
Run Code Online (Sandbox Code Playgroud)
您可以在本网站上阅读更多相关信息.
我创建了一个小数据集来玩.以下代码定义了data.frame并将其融合为ggplot通常喜欢的格式.
library(ggplot2)
library(reshape2)
mydf<-structure(list(SPY = c(141.37, 141.67, 140.54, 141.19, 141.07,
141.54, 142.16, 143.24, 142.96, 143.02, 142.54, 142.82, 142.38,
142.8, 143.95, 142.26, 142.13, 142.05, 142.79, 143.75, 144.86,
141.31, 141.19, 138.91, 140.37, 141.29, 140.15, 141.28, 138.17,
136.98, 133.43, 132.06, 130.72, 133.86, 134.99, 133.04, 135.24,
135.91, 134.91, 137.37, 92.96, 92.85, 93.47, 90.67, 91.04, 89.09,
86.95, 87.11, 84.37, 84.4, 85.06, 80.57, 84.05, 82.75, 83.11, …
Run Code Online (Sandbox Code Playgroud) 这是设置:
mydf<-structure(list(weight = c(1.34288799762726, 1.18884372711182,
1.15979790687561, 1.34288799762726, 1.08285343647003, 1.07932889461517,
1.28913342952728, 1.211909532547, 1.03438591957092, 1.22719633579254
), RespID = c(3182, 3183, 3184, 3185, 3186, 3187, 3188, 3189,
3190, 3191), b1 = structure(c(1L, 2L, 1L, 1L, 2L, 2L, 1L, 2L,
2L, 2L), .Label = c("Mand", "Kvinde"), class = "factor")), .Names = c("weight",
"RespID", "b1"), row.names = c(NA, 10L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)
现在,对摘要的调用将生成以下输出:
summary(mydf)
# weight RespID b1
# Min. :1.034 Min. :3182 Mand :4
# 1st Qu.:1.102 1st Qu.:3184 Kvinde:6
# Median :1.200 Median …
Run Code Online (Sandbox Code Playgroud) 我在R中编写了以下代码以开始使用数据请求API.这是一个普通的Web服务JSON API.
library(RJSONIO)
library(RCurl)
library(httr)
r <- POST("http://api.scb.se/OV0104/v1/doris/sv/ssd/START/PR/PR0101/PR0101A/KPIFastM2",
body = '{ "query": [], "response": { "format": "json" } }')
stop_for_status(r)
a<-content(r, "text", "application/json", encoding="UTF-8")
cat(a, file = "test.json")
x<-fromJSON(file("test.json", "r"))
mydf<-do.call(rbind, lapply(x$data, data.frame))
colnames(mydf)<-c("YearMonth", "CPI")
Run Code Online (Sandbox Code Playgroud)
基本上它使用httr初始化URL的get reuest,然后通过fromJSON将生成的JSON数据转换为R结构.JSON请求如下所示:
{ "query": [], "response": { "format": "json" } }
Run Code Online (Sandbox Code Playgroud)
事实上,我的代码将数据输入到我想要的数据框架中,但是它非常冗长,我拒绝相信所有这些线条都是实现所需结果所必需的.想要的结果当然是mydf data.frame.
所以我的问题是:从Web服务获取数据到data.frame的最短和最正确的方法是什么?
干杯,迈克尔
我有一个类似但不同的问题,当我的ggplot2语法合理时,如何处理R CMD检查"没有可见的全局变量绑定"注释?.
在那种情况下,通过使用aes_string而不是aes,一切都顺利进行.然而,这与plyr afaik无法实现.
例如,当我通过ddply引用数据框中的列名时会出现问题.
ddply(mydf, .(VarA, VarB, VarC, VarD), summarize, sum = sum(VarE))
#
# MyPackage: no visible binding for
# global variable ‘VarA’
Run Code Online (Sandbox Code Playgroud)
这段代码是完全有效和理智的,即使我理解使用NOTE,它们仍然会混淆输出窗口中的其他消息,使得包开发变得困难,并且实际上强制开发人员忽略NOTE.
摆脱这些笔记的正确方法是什么?或者替代方案是什么是以R CMD检查接受而不给出NOTE的方式编写代码的正确方法?
最好,迈克尔
我有两个数据框——一个很大(超过 200 万行),一个较小(大约 300,000 行)。较小的数据帧是较大数据帧的子集。唯一的区别是较大的有一个额外的属性,我需要添加到较小的。
具体来说,大数据框的属性是(日期、时间、地址、标志),小数据框的属性是(日期、时间、地址)。我需要以某种方式将正确的相应 Flag 值放入每行的较小数据框中。“合并”数据帧的最终大小应该与我较小的相同,从大数据帧中丢弃未使用的行。
实现这一目标的最佳方法是什么?
更新:我使用以下内容测试了合并功能:
new<-merge(data12, data2, by.x = c("Date", "Time", "Address"),
by.y=c("Date", "Time", "Address"))
Run Code Online (Sandbox Code Playgroud)
和
new<-merge(data12, data2, by = c("Date", "Time", "Address"))
Run Code Online (Sandbox Code Playgroud)
两者都返回一个空数据框(新),具有正确数量的属性以及以下警告消息:
Warning message:In `[<-.factor`(`*tmp*`, ri, value = c(15640, 15843, 15843, 15161, : invalid factor level, NAs generated
Run Code Online (Sandbox Code Playgroud)