是rjava至R连接到Java的唯一途径?我问,因为网页末尾有免责声明:
此接口使用Java反射API来查找正确的方法,因此它更慢并且可能不正确(适用于简单示例,但可能不适用于更复杂的示例).目前,在程序中不鼓励使用它,因为它可能在将来发生变化.
这有点令人担忧.你是如何解决这个问题的?我知道Rweka有一个独立的界面,所以我可能会考虑那个包,但也许很多R用户已经经历过这些痛苦.
假设我有一个函数从MySQL表读取数据,操作它并返回一些data.frame.注意,该函数只是一个例子,其功能无关紧要......,例如:
addRowSd <- function(table,con,pattern="^Variable") {
dframe <- dbReadTable(con,table)
cn <- colnames(dframe)
qs <- subset(x, x %in% grep(pattern, x, value=TRUE))
dframe$qsd <- sd(t(dframe[,c(qs)]))
return(dframe)
}
mydf$sd <- addRowSd(...)
Run Code Online (Sandbox Code Playgroud)
我最终得到一个名为mydf的data.frame.现在我想对SQL表名的字符向量这样做,并相应地命名返回的数据帧.如果我只是用
x=lapply(MySQLtablenames,addRowSd,con)
Run Code Online (Sandbox Code Playgroud)
我会得到一些名为x的列表.当然,我可以按照我喜欢的方式取消所有内容并重命名,但我的问题是:
如何使lapply(或其他类似函数)返回多个单数据帧或至少包含从我的字符向量"MySQLtablenames"派生的某些名称的列表?
我正在尝试使用R来分析大型DNA序列文件(fastq文件,每个文件几千兆字节),但这些文件的标准R接口(ShortRead)必须立即读取整个文件.这不适合内存,因此会导致错误.有什么方法可以一次读取几(千)行,将它们填入内存文件,然后使用ShortRead从内存文件中读取?
我正在寻找像Perl的IO :: Scalar这样的东西.
美好的一天,我希望使用ggplot2生成图形,但不使用其默认的分类变量排序(按字母顺序排列,在脚本中:字母),但使用连续变量的相关值(在脚本中:数字).
这是一个示例脚本:
library(ggplot2)
trial<-data.frame(letters=letters, numbers=runif(n=26,min=1,max=26))
trial<-trial[sample(1:26,26),]
trial.plot<-qplot(x=numbers, y=letters, data=trial)
trial.plot
trial<-trial[order(trial$numbers),]
trial.plot<-qplot(x=numbers, y=letters, data=trial)
trial.plot
trial.plot+stat_sort(variable=numbers)
Run Code Online (Sandbox Code Playgroud)
最后一行不起作用.
警告......非常新手问题如下:
我试图绘制几个(X,Y)点的相当规则的分布,每个点与一个值相关联,让我们调用Z,它在-20到+20之间变化非常不规则.我对平滑感兴趣; 我想要点Z值根据平滑变化的调色板绘制,就像Gnuplot可以使用适当的平滑调色板一样.我已经尝试过基础R,ggplot2和latticeExtra,尽我所能,我可以提出以下几乎可以做到的事情:
library(lattice)
library(latticeExtra)
library(colorRamps)
df = read.table(file"whatever", header=T)
levelplot(Z~X*Y, df, panel=panel.levelplot.points, cex=0.2,
col.regions=colorRampPalette(c("red","white","blue"))(50))
Run Code Online (Sandbox Code Playgroud)
一个数据点如下:1302525 225167 -3.5
当我用最后一个代码行中的"50"绘制我的数据帧为3时,我得到红色,白色和蓝色的可预测的R再循环行为,重复五次,第16个颜色条段为白色.将3更改为7会导致更多的红色和蓝色阴影创建2个重复颜色范围段,并在颜色范围尝试回收时留下两个微红色.这表明使这个数字更大可以使颜色更精细.但如果我输入一个大于16的数字,那就是我得到的16个彩色片段,从红色到白色均匀变换为蓝色.但是我希望色标更精细,并且在完美的世界中,将Z的零强制为白色.
到目前为止我对R的经验是,当我不能做到这么简单的事情时,我错过了一个非常基本的概念.它是什么?
如何在R中的粘贴命令中的每个元素之间插入逗号?
paste ("X",1:5,sep="")
"X1" "X2" "X3" "X4" "X5"
Run Code Online (Sandbox Code Playgroud)
现在我想在每个元素之间插入一个逗号
Desired Output
"X1","X2","X3","X4","X5"
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助
我有一个包含x值向量,y值向量和ID向量的数据框:
x <- rep(0:3, 3)
y <- runif(12)
ID <- c(rep("a", 4), rep("b", 4), rep("c", 4))
df <- data.frame(ID=ID, x=x, y=y)
Run Code Online (Sandbox Code Playgroud)
我想为x的子集创建一个单独的lm,并且y共享相同的ID.以下代码完成了工作:
a.lm <- lm(x~y, data=subset(df, ID=="a"))
b.lm <- lm(x~y, data=subset(df, ID=="b"))
c.lm <- lm(x~y, data=subset(df, ID=="c"))
Run Code Online (Sandbox Code Playgroud)
除非这是非常脆弱的(未来的数据集可能有不同的ID)和未矢量化.我还想将所有lms存储在单个数据结构中.必须有一种优雅的方式来做到这一点,但我找不到它.有帮助吗?
我有一个时间序列,我正在检查数据异质性,并希望向一些数据分析师解释其中的一些重要方面。我有一个由 KDE 图覆盖的密度直方图(为了清楚地看到两个图)。然而,原始数据是计数,我想将计数值作为直方图条上方的标签放置。
这是一些代码:
$tix_hist <- ggplot(tix, aes(x=Tix_Cnt))
+ geom_histogram(aes(y = ..density..), colour="black", fill="orange", binwidth=50)
+ xlab("Bin") + ylab("Density") + geom_density(aes(y = ..density..),fill=NA, colour="blue")
+ scale_x_continuous(breaks=seq(1,1700,by=100))
tix_hist + opts(
title = "Ticket Density To-Date",
plot.title = theme_text(face="bold", size=18),
axis.title.x = theme_text(face="bold", size=16),
axis.title.y = theme_text(face="bold", size=14, angle=90),
axis.text.x = theme_text(face="bold", size=14),
axis.text.y = theme_text(face="bold", size=14)
)
Run Code Online (Sandbox Code Playgroud)
我考虑过使用 KDE 带宽等外推计数值。是否可以对 ggplot 频率直方图的数字输出进行数据框化并将其添加为“层”。我还不精通 layer() 函数,但任何想法都会有所帮助。非常感谢!
我正在寻找一种方法来阻止R在会话期间覆盖文件.更通用的解决方案则更好.
目前,我得到了一堆的函数调用如:safe.save,safe.png,safe.write.table这是实现或多或少地
safe.smth <- function(..., file) {
if (file.exists(file))
stop("File exists!")
else
smth(..., file=file)
}
Run Code Online (Sandbox Code Playgroud)
它有效,但只有我控制执行.如果某些(不是我的)函数创建了文件,我就无法阻止它被覆盖.
另一种方法是在文件上设置只读标志,这也是覆盖现有文件的前R.但这也有缺点(例如:您不知道哪些文件需要保护).
或者写一行:
protect <- function(p) if (file.exists(p)) stop("File exsits!") else p
Run Code Online (Sandbox Code Playgroud)
并在提供文件名时始终使用它.
有没有办法强制这种行为会话?连接的某种全局设置?也许只是功能的子集(图形设备,file创建的连接等)?也许某些系统特定的解决方
以下内容可用作测试用例:
test <- function(i) {
try(write.table(i, "test_001.csv"))
try(writeLines(as.character(i), "test_002.txt"))
try({png("test_003.png");plot(i);dev.off()})
try({pdf("test_004.pdf");plot(i);dev.off()})
try(save(i, file="test_005.RData"))
try({f<-file("test_006.txt", "w");cat(as.character(i), file=f);close(f)})
}
test(1)
magic_incantations() # or magic_incantations(test(2)), etc.
test(2) # should fail on all writes (to test set read-only to files from first call)
Run Code Online (Sandbox Code Playgroud) 如示例中所示,我正在尝试substring使用data.frame(video_data_2)中的Video_full列.我希望在这段时间之后保留所有角色.期间始终存在,只有一个期间,并且该列的每个值处于不同的位置.
Date Video_full Instances
1 Apr 1, 2010 installs/AA.intro_video_1 546
2 Apr 1, 2010 installs/ABAC.intro_video_2 548
Run Code Online (Sandbox Code Playgroud)
我有子串工作:
video_data_2$Video_full <- substring(video_data_2$Video_full,11)
Run Code Online (Sandbox Code Playgroud)
而且strsplit:
strsplit("installs/AA.intro_video_1 ",'[.]')
Run Code Online (Sandbox Code Playgroud)
我只是无法弄清楚如何substring在动态位置启动或仅保留返回的第二个值strsplit.
感谢您为简单问题提供的任何帮助.